• DİKKAT

    DOSYA İndirmek/Yüklemek için ÜCRETLİ ALTIN ÜYELİK Gereklidir!
    Altın Üyelik Hakkında Bilgi

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

  • Konbuyu başlatan Konbuyu başlatan s.savas
  • Başlangıç tarihi Başlangıç tarihi
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
 
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 .....

.
 
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
 
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.
.
 
Merak ettim TCKİMLİK ve SICIL gibi iki tane benzersiz olması gereken alan varken, KIMLIK alanına niye ihtiyaç duydunuz.
 
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.
 
Test ettim kayıt atmaya izin vermiyor.
 
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
 
SQL metnini deneyemedim ama genel mantığı böyle olması gerekiyor.
Bir alanı Birincil Anahtar ayarlasanız dahi kendi uyarı mesajı karışık gelebilir.
 
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
 
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

Hata mesajı döndüğünde excel'in "on error goto" özelliğini inceleyin.
 
Altın üye değilim dosyanızı bir dosya paylaşım sitesine yüklerseniz elimden geldiğince yardımcı olayım.
 
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:
Geri
Üst