Soru Access veritabanına kayıtta mükerrer kayıt engelleme?

Katılım
12 Ocak 2009
Mesajlar
838
Excel Vers. ve Dili
2003
Merhaba arkadaşlar.
Aşağıdaki kod bloğu ile REHBER isimli veritabanına kayıt ekliyorum. İstiyorum ki yeni kayıt yaparken T.C Kimlik numarası ile mükerrer kayıt kontrolü yapılsın. Aynı kayıttan mevcut ise yeni kayıt yapılmasın.
Zamanı müsait olan arkadaşların ilgilenmesi ricasıyla.

Kod:
Private Sub CommandButton1_Click() 'EKLE

If txtAdi.Text = "" Then
txtAdi.SetFocus
MsgBox ("Lütfen Adını Soyad Bilgisi Girin..."), vbInformation, "Süleyman SAVAŞ"
Exit Sub
End If


Set baglan = CreateObject("adodb.connection")
Set rs = CreateObject("adodb.recordset")
Call baglanti

  rs.Open "select * from [REHBER] where [KIMLIK] = " & yeniid, baglan, 1, 3
  If rs.RecordCount = 0 Then
    rs.AddNew

 rs("KIMLIK") = yeniid.Value
 rs("ADI_SOYADI") = txtAdi.Value
 rs("TC_KIMLIK") = txtTCKimlik.Value
 rs("SICIL") = txtSicil.Value
 rs("IL") = cmbIL.Value
 rs("ILCE") = cmbILCE.Value
 
   rs.Update
  
    MsgBox txtAdi & " adlı kayıt başarı ile tamamlandı.", , "Süleyman SAVAŞ"
  End If
  rs.Close
  Set kayit = Nothing
  listeye_al
  temizle
End Sub
 

Haluk

𐱅𐰇𐰼𐰚
Katılım
7 Temmuz 2004
Mesajlar
12,268
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
rs.RecordCount = 0 şartı sağlanıyorsa, veri tabanının KIMLIK alanında aynı kayıttan yok demektir.

rs.RecordCount > 0 şartı sağlanıyorsa, var demektir.

Siz de buna göre IF bloğunu ayarlarsanız, istediğiniz olur ....


Kod:
if rs.RecordCount = 0 then
   kayıt ekle
else
   uyarı ver
   exit sub
end if
gibi .....

.
 
Katılım
12 Aralık 2015
Mesajlar
1,200
Excel Vers. ve Dili
Türkçe Ofis 2007
Kod:
rs.Open "select * from [REHBER] where [KIMLIK] = " & yeniid, baglan, 1, 3
yukardaki satırı aşağıdaki gibi değiştirerek deneyin.
Kod:
rs.Open "select * from [REHBER] where [KIMLIK] = " & yeniid & "and [TC_KİMLİK] = " & txtTCKimlik  , baglan, 1, 3
 

Haluk

𐱅𐰇𐰼𐰚
Katılım
7 Temmuz 2004
Mesajlar
12,268
Excel Vers. ve Dili
64 Bit 2010 - İngilizce
+
Google Sheets
+
JScript
Haaa..... ben KIMLIK ile TC Kimlik No yazılıyor sanmıştım..... neyse Ali Cimri bey durumu düzeltti.

Bence değişken isimlerini kod yazarken, okurken size mantıklı şeyler çağrıştıracak birşeyler bulun.
.
 
Katılım
12 Aralık 2015
Mesajlar
1,200
Excel Vers. ve Dili
Türkçe Ofis 2007
Merak ettim TCKİMLİK ve SICIL gibi iki tane benzersiz olması gereken alan varken, KIMLIK alanına niye ihtiyaç duydunuz.
 

Erdem Akdemir

Destek Ekibi
Destek Ekibi
Katılım
4 Mayıs 2007
Mesajlar
3,596
Excel Vers. ve Dili
2016 PRO TÜRKÇE-İNG. 64 BİT
Merhaba,

Access'te veri tabanını oluştururken TC alanını benzersiz olarak işaretlerseniz kod yazmanıza gerek kalmadan istediğiniz olabilir.
Test etmedim ama olacağını düşünüyorum.
 

Erdem Akdemir

Destek Ekibi
Destek Ekibi
Katılım
4 Mayıs 2007
Mesajlar
3,596
Excel Vers. ve Dili
2016 PRO TÜRKÇE-İNG. 64 BİT
Test ettim kayıt atmaya izin vermiyor.
 
Katılım
12 Ocak 2009
Mesajlar
838
Excel Vers. ve Dili
2003
Kod:
rs.Open "select * from [REHBER] where [KIMLIK] = " & yeniid, baglan, 1, 3
yukardaki satırı aşağıdaki gibi değiştirerek deneyin.
Kod:
rs.Open "select * from [REHBER] where [KIMLIK] = " & yeniid & "and [TC_KİMLİK] = " & txtTCKimlik  , baglan, 1, 3
İlgiye teşekkür ederim.
Aşağıdaki hatayı verdi.
1.PNG 2.PNG
 
Katılım
12 Aralık 2015
Mesajlar
1,200
Excel Vers. ve Dili
Türkçe Ofis 2007
SQL metnini deneyemedim ama genel mantığı böyle olması gerekiyor.
Bir alanı Birincil Anahtar ayarlasanız dahi kendi uyarı mesajı karışık gelebilir.
 
Katılım
12 Aralık 2015
Mesajlar
1,200
Excel Vers. ve Dili
Türkçe Ofis 2007
Aşağıdaki gibi deneyin. Sadece TC_KIMLIK alanını test ediyor.
Kod:
Private Sub CommandButton1_Click() 'EKLE

If txtAdi.Text = "" Then
txtAdi.SetFocus
MsgBox ("Lütfen Adını Soyad Bilgisi Girin..."), vbInformation, "Süleyman SAVAŞ"
Exit Sub
End If


Set baglan = CreateObject("adodb.connection")
Set rs = CreateObject("adodb.recordset")
Call baglanti

  rs.Open "select * from [REHBER] where [TC_KIMLIK] = " & txtTCKimlik, baglan, 1, 3
  If rs.RecordCount = 0 Then
    rs.AddNew

rs("KIMLIK") = yeniid.Value
rs("ADI_SOYADI") = txtAdi.Value
rs("TC_KIMLIK") = txtTCKimlik.Value
rs("SICIL") = txtSicil.Value
rs("IL") = cmbIL.Value
rs("ILCE") = cmbILCE.Value

   rs.Update

    MsgBox txtAdi & " adlı kayıt başarı ile tamamlandı.", , "Süleyman SAVAŞ"
    else
    Msgbox "Mükerrer Kayıt yapamazsınız"
  End If
  rs.Close
  Set kayit = Nothing
  listeye_al
  temizle
End Sub
 
Katılım
12 Ocak 2009
Mesajlar
838
Excel Vers. ve Dili
2003
Aşağıdaki gibi deneyin. Sadece TC_KIMLIK alanını test ediyor.
Kod:
Private Sub CommandButton1_Click() 'EKLE

If txtAdi.Text = "" Then
txtAdi.SetFocus
MsgBox ("Lütfen Adını Soyad Bilgisi Girin..."), vbInformation, "Süleyman SAVAŞ"
Exit Sub
End If


Set baglan = CreateObject("adodb.connection")
Set rs = CreateObject("adodb.recordset")
Call baglanti

  rs.Open "select * from [REHBER] where [TC_KIMLIK] = " & txtTCKimlik, baglan, 1, 3
  If rs.RecordCount = 0 Then
    rs.AddNew

rs("KIMLIK") = yeniid.Value
rs("ADI_SOYADI") = txtAdi.Value
rs("TC_KIMLIK") = txtTCKimlik.Value
rs("SICIL") = txtSicil.Value
rs("IL") = cmbIL.Value
rs("ILCE") = cmbILCE.Value

   rs.Update

    MsgBox txtAdi & " adlı kayıt başarı ile tamamlandı.", , "Süleyman SAVAŞ"
    else
    Msgbox "Mükerrer Kayıt yapamazsınız"
  End If
  rs.Close
  Set kayit = Nothing
  listeye_al
  temizle
End Sub
Ölçüt ifadesinde veri türü uyuşmazlığı hatası veriyor.
4.PNG
5.PNG
 

Ekli dosyalar

Erdem Akdemir

Destek Ekibi
Destek Ekibi
Katılım
4 Mayıs 2007
Mesajlar
3,596
Excel Vers. ve Dili
2016 PRO TÜRKÇE-İNG. 64 BİT
Hata mesajı döndüğünde excel'in "on error goto" özelliğini inceleyin.
 
Katılım
12 Aralık 2015
Mesajlar
1,200
Excel Vers. ve Dili
Türkçe Ofis 2007
Altın üye değilim dosyanızı bir dosya paylaşım sitesine yüklerseniz elimden geldiğince yardımcı olayım.
 

Erdem Akdemir

Destek Ekibi
Destek Ekibi
Katılım
4 Mayıs 2007
Mesajlar
3,596
Excel Vers. ve Dili
2016 PRO TÜRKÇE-İNG. 64 BİT
Merhaba,

Sorguyu aşağıdaki gibi deneyin. Tc alanını access'te metin olarak oluşturduğunuz için hata veriyordu.

Kod:
 rs.Open "select * from [REHBER] where [TC_KIMLIK] = '" & txtTCKimlik & "'", baglan, 1, 3
Aşağıdaki satırı'da koddan kaldırın. Ona gerek yok , otomatik sayı alanı olduğu için.

Kod:
rs("KIMLIK") = yeniid.Value
 
Son düzenleme:
Üst