VB Veri Tabanı Yardım [ KAYIT ]

xcephanex

Öğrenci
Katılım
16 Kasım 2013
Mesajlar
8
Reaksiyon puanı
0
Puanları
1
Merhabalar Ben bir program yaptım.Herşey güzel veri tabanı bağlantısı mevcut ancak bir sorunum var.Veri tabanına Aynı isimde 2 kayıt eklenebiliyor.Bunu Engellemenin bir yolu varsa yardımlarınızı bekliyorum.
PHP:
Dim komut As New OleDbCommand

        Dim yol As String = Application.StartupPath.ToString()

        Dim baglan As New OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + yol + "\server2.accdb")
        baglan.Open()

        komut.Connection = baglan

        komut.CommandType = CommandType.Text

        komut.CommandText = "INSERT INTO Tablo1 (Ad,Adres,Telefon) values ('" + TextBox1.Text + "','" + TextBox2.Text + "','" + TextBox3.Text + "')"
        komut.ExecuteNonQuery()

        baglan.Close()

        Me.Tablo1TableAdapter.Fill(Me.Server2DataSet.Tablo1)

        MsgBox(TextBox1.Text + " İsimli Müşteri Kaydedildi.")

BUNLAR ÖRNEK KODLAR NASIL AYNI İSİMDE 2. KAYDI ENGELLERİZ.
C# kullananlarda cevap verebilir Kodları hemen hemen aynı.
 

hokumus

Asistan
Katılım
15 Mayıs 2012
Mesajlar
173
Reaksiyon puanı
3
Puanları
18
Öncelikle C# kullananlara cevap hakkı verdiğin için teşekkürler.

Engellemeye gelince, kullanıcı veri girişi yaptı ve kaydet butonuna bastı. Insert sorgusunu çalıştırmadan önce kontrol etmek istediğin alana select çekip kontrol edebilirsin.
 

xcephanex

Öğrenci
Katılım
16 Kasım 2013
Mesajlar
8
Reaksiyon puanı
0
Puanları
1
PHP:
Konuyu VB diye açtım o yüzden öle yazdım

Bide kod verebilirseniz sevinirim dediğinizi anladım ama kodları lazım bana :) Kontrol edilecek kısım " Ad "
 

hokumus

Asistan
Katılım
15 Mayıs 2012
Mesajlar
173
Reaksiyon puanı
3
Puanları
18
SELECT COUNT(*) FROM Tablo1 WHERE Ad = 'İsim'

Bu sorgu sana int bir değer döndürecek. Eğer sonuç < 1 daha önce bu veri girilmemiş demektir.
Bu şekilde kontrol edebilirsin.
 

annttiigs

Profesör
Katılım
7 Şubat 2007
Mesajlar
2,589
Reaksiyon puanı
24
Puanları
218
db'de ilgili field'i unique de ayarlayabilirsin. ama burada her db'de yok sanırım büyük küçük harf ayrımına dikkat etmen lazım. Ayrıca yukarıdaki örneklerde de bu gözden kaçmış. hangi yöntemi kullanırsan kullan büyük küçük harf ayrımına dikkat etmen lazım.
 

hokumus

Asistan
Katılım
15 Mayıs 2012
Mesajlar
173
Reaksiyon puanı
3
Puanları
18
db'de ilgili field'i unique de ayarlayabilirsin. ama burada her db'de yok sanırım büyük küçük harf ayrımına dikkat etmen lazım. Ayrıca yukarıdaki örneklerde de bu gözden kaçmış. hangi yöntemi kullanırsan kullan büyük küçük harf ayrımına dikkat etmen lazım.

Yukarıda paylaşılan sadece bir fikirdir. Count fonksiyonunun amacı anlatılmaktadır. Büyük küçük ortanca harf kontrolü yazılımı yapacak olan adamın işidir. Yanlış bir bakış açısı bence.
 

annttiigs

Profesör
Katılım
7 Şubat 2007
Mesajlar
2,589
Reaksiyon puanı
24
Puanları
218
benim bakış açım o değil zaten. sizinkisine ufak bir ekleme yaptım kendimce. adamlar db'ye unique diye bir özellik koymuşlar. Bence araştırılırsa case insensitive kullanımı da vardır diye düşünüyorum.
 

eSa

Dekan
Katılım
5 Kasım 2011
Mesajlar
9,782
Reaksiyon puanı
352
Puanları
263
benim bakış açım o değil zaten. sizinkisine ufak bir ekleme yaptım kendimce. adamlar db'ye unique diye bir özellik koymuşlar. Bence araştırılırsa case insensitive kullanımı da vardır diye düşünüyorum.

Veritabanını oluştururken belirtmek gerek. Her tablo için tek tek belirtmeyiz, çünkü varsayılan collation dur.

eğer Turkish_CI_AS (case insensitive) seçmiş isek -ki genelde bu seçiliyor- bundan sonraki tablolarda da geçerli olacak.

case sensitive için varsayılan collation Turkish_CS_AS olarak belirtmek gerekecek.


büyük/küçük harf farketmeyen (CI) bir db de. CS olarak tablo açmak istersek bunu oluşturulma anında belirtmek gerek
Kod:
create table test(x varchar(50) collate Turkish_CS_AS);
şeklinde.

Yada tam tersi durum için.

Test için şunu deneyebiliriz.
Kod:
if 'deneme' = 'DENEME' collate Turkish_CI_AS select 'eşit' else select 'eşit değil'

Sonuç= eşit

if 'deneme' = 'DENEME' collate Turkish_CS_AS select 'eşit' else select 'eşit değil'

Sonuç= eşit değil

olacaktır.

Eğer bir kolonu büyük küçük harf duyarlı olarak indexlemek istersek bunun için o kolonun collate değerini değiştirmek gerekecek.

Kod:
alter table deneme alter column x varchar(50) collate Turkish_CS_AS
gibi.


ya da,

herhangi bir değişiklik yapmadan yalnızca bir kolon üzerinde büyük küçük harf duyarlı (CS) bir sorgu çalıştırmak istersek de,
Kod:
select * from deneme where x collate Turkish_CS_AS = 'Dene'

gibi kullanabiliriz.


(Biraz düzensiz bir anlatım oldu. Umarım arkadaşlara yardımcı olabilir)
 
Üst