Databese 'de var mı yokmu

Encoded

Üyecik
Benim şöyle bir sorunum var beyler . Textbox ' a kayıt yapmak için girilen veri datagridde(daha doğrusu database' de) var ise uyarı vericek örnek "girdiğiniz kodun aynısı database 'de var lütfen farklı bir kod giriniz vb." şeklinde yapmak istiyorum .


OleDbConnection baglan = new OleDbConnection("provider=Microsoft.Jet.OleDb.4.0; Data Source=bilnetveritabani.mdb");
OleDbCommand komut = new OleDbCommand();

komut.Connection = baglan;

baglan.Open();

if (textBox1.Text == ???????????? ) ==> //buraya ne yazacağımı bulamadım . yani datagridde varmı yokmu kontrolü
{
MessageBox.Show("hop");
}

else
{

komut.CommandText = "insert into bilgi(tarih,isinkodu,isinadi,kalipebadi,kalipsayisi,trambilgisi,durum,bilgi,toplamalan,isialankisi) values('" + tarih + "','" + textBox1.Text + "','" + textBox2.Text + "','" + comboBox1.SelectedItem + "','" + textBox3.Text + "','" + comboBox2.SelectedItem + "','" + comboBox4.SelectedItem + "','" + textBox4.Text + "','" + toplamalan + "','" + comboBox3.SelectedItem + "')";
komut.ExecuteNonQuery();


baglan.Close();
 

hokumus

Asistan
Selamlar,

Database' de kaydın olup olmadığını sorgulamak için, senin koduna göre en basit yöntem Count sorgulamak.

SELECT COUNT(*) FROM TABLO_ADI WHERE ALAN = KOSUL

Yukarıdaki gibi bir sorguyu database' den soguladığında sana kayıt sayısı bilgisini dönecektir. Eğer böyle bir kayıt daha önce girilmedi ise 0 değerini döndürecektir. Sende gelen bu 0 degerine göre insert edeceksin. Eğer değer 0' dan büyük ise bu kayıt daha önce girilmiştir diye uyarı vereceksin.


Kolay gelsin.
 

kizanlik

Asistan
Kodun daha once girilmis olmasini veya olmamasini kontrol etmenin en kolay yolu, alani "primary key" olarak tanimlamaktir.

Primary key olarak tanimlanmis alana, ayni deger eklenmek istenirse veya baska bir deger varolan degerle degistirilmek istenirse hata doner.

Bu hatadan faydalanarak mesaj gosterilebilir. Tablo tasarimini buna gore degistirmek gerekebilir.
 

aslanpayi

Doçent
Kodun daha once girilmis olmasini veya olmamasini kontrol etmenin en kolay yolu, alani "primary key" olarak tanimlamaktir.

Primary key olarak tanimlanmis alana, ayni deger eklenmek istenirse veya baska bir deger varolan degerle degistirilmek istenirse hata doner.

Bu hatadan faydalanarak mesaj gosterilebilir. Tablo tasarimini buna gore degistirmek gerekebilir.


Peki birden fazla sütuna veri eklenecekse? Veya id sütunu kullanıyorsa ne olacak? :D
 

hokumus

Asistan
Kodun daha once girilmis olmasini veya olmamasini kontrol etmenin en kolay yolu, alani "primary key" olarak tanimlamaktir.

Primary key olarak tanimlanmis alana, ayni deger eklenmek istenirse veya baska bir deger varolan degerle degistirilmek istenirse hata doner.

Bu hatadan faydalanarak mesaj gosterilebilir. Tablo tasarimini buna gore degistirmek gerekebilir.


Eğer uygulama personel kaydı gibi bir tablo yapısı ise TC Kimlik alanını unique bir alan olarak tanımlarsın. Ve bu şekilde geriye dönen sonuca göre işlem yaparsın. Burada olur.

Fakat 5 tane alanı kontrol etmen gereken bir tablo yapısında seni sadece unique bir alan kurtarmaz. En basit yöntem olarak count sorgulamak ya da dönen değeri null kontrol etmen gerekecektir.
 

kizanlik

Asistan
Eğer uygulama personel kaydı gibi bir tablo yapısı ise TC Kimlik alanını unique bir alan olarak tanımlarsın. Ve bu şekilde geriye dönen sonuca göre işlem yaparsın. Burada olur.

Fakat 5 tane alanı kontrol etmen gereken bir tablo yapısında seni sadece unique bir alan kurtarmaz. En basit yöntem olarak count sorgulamak ya da dönen değeri null kontrol etmen gerekecektir.

Birden fazla alan Primary Key olarak tanımlanabilir.
 

kizanlik

Asistan
Sizi anlıyorum.

Kod:
No               Cinsiyet     
-------------- ------
111 222 333 44 Erkek
111 222 333 44 Kadın

olursa ne olacak?

diyorsunuz.

Bu durum, veritabanı tasarımıyla ilgili. Bu güne kadar birden fazla alanda kontrol yapma ihtiyacı duymadım. İhtiyaç duyuluyorsa başka bir problemin (tasarımsal) olduğunu düşünüyorum. O nedenle "mesela?" diye sordum.

Düşünüyorum. Aklıma gelmiyor.

İlla ki başka alanı da kontrol etmek istiyorsanız şöyle bir script kullanmanızı öneririm:

Kod:
DECALRE [MENTION=261016]veri[/MENTION]
DECLARE [MENTION=261016]veri[/MENTION]Kontrolu BIT
DECLARE [MENTION=65976]hata[/MENTION] BIT

IF EXISTS (
                 SELECT KontrolEdilecekAlan
                 FROM Tablo
                 WHERE KontrolEdilecekAlan = [MENTION=261016]veri[/MENTION]
               )
BEGIN
    SET [MENTION=261016]veri[/MENTION]Kontrolu = 1
ELSE
    SET [MENTION=261016]veri[/MENTION]Kontrolu = 0
END

IF [MENTION=261016]veri[/MENTION]Kontrolu = 0
BEGIN
     --Kayit islemi

    SET [MENTION=65976]hata[/MENTION] = 0
END
ELSE
BEGIN
    SET [MENTION=65976]hata[/MENTION] = 1
END

Yukarıdaki kod hızlıca yazdığım bir kod ve StoredProcedure olarak kullanıma uygun bir kod. Bu mantıkta bir yapı hazırlanırsa, yapmak istediğiniz kontrolü yapabilirsiniz.
 

hokumus

Asistan
Genel olarak güzel bir kod paylaşmışsın. Fakat yukarıda soruyu soran arkadaş Access kullanmış. Procedure kullanamaz. Yazdığın procedur ile count almak ile aynı işi yapıyor. Soruyu soran kişinin gene bunu kullanması gerekecek.
 

kizanlik

Asistan
OleDbCommand'in CommandText'ine girilebilir aslinda.

En son 97de Access kullandim. Yeni Access veritabani cok daha gelismistir. Simdi If / IIf var galiba. SP gibi calisan Query de var.

Neyse.

Denerse ve calisirsa (Access'e uyarlamak gerekecek) isi cok kolaylasir.
Onemli olan mantik.

Atladim.

Count'a karsiyim.

Donen ResultSet icerisinde sayacak.
Sifir verebilir ama tabloda varolabilir.
 

Toughwolf

Asistan
Birden fazla alan Primary Key olarak tanımlanabilir.

Yanlis anlamadiysam burda yanlis bir kullanim onermissin. Birden fazla primary key, composite primary key olarak adlandirilir ve bu durumla iliskisi yoktur. Arkadasin demek istedigi bir alanda TC no var baska bir alanda da ehliyet no var. 2 degerde unique yapida kisiden kisiye degisiyor. Bu durumda biri primary key oburu unique index olarak tanimlanir. Her primary key bir unique indextir fakat her unique index primary key degildir.
 

kizanlik

Asistan
Birden fazla alan Primary Key olarak tanimlanabilir (index baska bir sey). Alanlarin icerdigi veri, farkli satirda da olmasi durumunda hata doner.

Verdigim ornekteki kimlik no ve cinsiyet farkli alanlar ama ikisi de Primary Key. Tek alan gibi. Boyle kullanimin sorunu su: Kimlik no VE cinsiyet ayni degere sahipse hata donduruyor fakat birisi farkliysa kayit islemini tamamliyor. Ayni kimlik numarali kadin ve erkek olusma ihtimali var.

Daha once de belirttigim gibi, bir tabloda unique olmasi gereken tek alan olmali. Diger durumlarda buyuk ihtimalle tasarim hatasi vardir.

Kimlik no ve ehliyet no dersek.
Ikisi farkli nesneler. Farkli tabloda tutulmali.
 
Üst