AccessTr.neT
Mükerrer Kaydı Engelleme - Baskı Önizleme

+- AccessTr.neT (https://accesstr.net)
+-- Forum: Microsoft Access (https://accesstr.net/forum-microsoft-access.html)
+--- Forum: Access Cevaplanmış Soruları (https://accesstr.net/forum-access-cevaplanmis-sorulari.html)
+--- Konu Başlığı: Mükerrer Kaydı Engelleme (/konu-mukerrer-kaydi-engelleme.html)



Mükerrer Kaydı Engelleme - Allback - 13/04/2018

Merhaba,

Ekteki "egitim_katilimci_formu"nda aynı kişiyi ikinci kez eklemeye çalışırsam hata veriyor ama ekli olan kişiden hariç daha önce eklenmemiş bir kişi ile birlikte seçersem hata vermiyor.

Bir de hata mesajına önceden kayıtlı olan kişilerin isimlerini getirebilir miyiz (Ben sadece bir kişinin ismini getirebildim) ya da hata mesajı vermesi yerine ekli olanları değil de sadece tabloda olmayanları eklemesini sağlayabilir miyiz?


Cvp: Mükerrer Kaydı Engelleme - Allback - 13/04/2018

Hata mesajı yerine,

kodun sonuna silme sorgusu ekleyerek mükerrer olan kayıtların silinmesini sağladım.
İhtiyacı olanlar için paylaşıyorum.


DELETE tbl_gecici.sno
FROM tbl_gecici
WHERE (((tbl_gecici.sno) Not In (SELECT Min(tbl_gecici.sno) AS EnAzsno FROM tbl_gecici GROUP BY tbl_gecici.sicilno, tbl_gecici.adisoyadi, tbl_gecici.gorev, tbl_gecici.onay; )));



Cvp: Mükerrer Kaydı Engelleme - ozanakkaya - 13/04/2018

Merhaba, birde butonun tıklandığında olayındaki kodu aşağıdaki ile değiştirerek deneyiniz.

Dim db As Database
Dim rst As Recordset
   
Set db = CurrentDb()
Set rst = db.OpenRecordset("gorev_sorgusu")
   
rst.MoveFirst

recalc

DoCmd.SetWarnings False

Do While Not rst.EOF

If rst![onay] = True Then

   If DCount("[sicilno]", "tbl_gecici", "[sicilno]= '" & rst![sicilno] & "'") <> 0 Then
   
       GEklenmeyen = rst![adsoyad] & ", " & GEklenmeyen
       
   Else
   
       Geklenen = rst![adsoyad] & ", " & Geklenen
       DoCmd.RunSQL "INSERT INTO tbl_gecici ( adisoyadi, sicilno, gorev, onay ) SELECT adsoyad, sicilno, gorev, onay FROM personel_kayit_tablosu WHERE (((sicilno)= '" & rst![sicilno] & "'));"
           
   End If

End If

   rst.MoveNext
   
Loop

If Len(GEklenmeyen) <> 0 Then

   MsgBox (GEklenmeyen & " daha önceden girilmiş.")

End If

If Len(Geklenen) <> 0 Then

   MsgBox (Geklenen & " Kaydedildi.")

End If

DoCmd.RunSQL "UPDATE personel_kayit_tablosu SET onay = 0"

DoCmd.SetWarnings True



Cvp: Mükerrer Kaydı Engelleme - A.Kadir. - 13/04/2018

syn allback
cevabınız için teşekkürler.
vt inceleme fırsatı buldum.

bir öneri versem.

formunuzun veri kaynağı görev sorgusu yerine eşleşmeyenleri bulma sorgusu kullanıp gecici tabloda olmayan kayıtları çağırabilirsiniz.
bu sayede gecici tablonuzda kaydı olanlar formunuz üzerine  hiç gelmez.
SELECT personel_kayit_tablosu.id, personel_kayit_tablosu.adsoyad, personel_kayit_tablosu.sicilno, personel_kayit_tablosu.gorev, personel_kayit_tablosu.onay
FROM personel_kayit_tablosu LEFT JOIN tbl_gecici ON personel_kayit_tablosu.[sicilno] = tbl_gecici.[sicilno]
WHERE (((tbl_gecici.sicilno) Is Null));



Cvp: Mükerrer Kaydı Engelleme - Allback - 13/04/2018

(13/04/2018, 12:38)A.Kadir. yazdı: syn allback
cevabınız için teşekkürler.
vt inceleme fırsatı buldum.

bir öneri versem.

formunuzun veri kaynağı görev sorgusu yerine eşleşmeyenleri bulma sorgusu kullanıp gecici tabloda olmayan kayıtları çağırabilirsiniz.
bu sayede gecici tablonuzda kaydı olanlar formunuz üzerine  hiç gelmez.
SELECT personel_kayit_tablosu.id, personel_kayit_tablosu.adsoyad, personel_kayit_tablosu.sicilno, personel_kayit_tablosu.gorev, personel_kayit_tablosu.onay
FROM personel_kayit_tablosu LEFT JOIN tbl_gecici ON personel_kayit_tablosu.[sicilno] = tbl_gecici.[sicilno]
WHERE (((tbl_gecici.sicilno) Is Null));

Kadir Bey,

Öneriniz için çok teşekkürler. Öyle yapmayı da düşündüm ama bu sefer eklediğim birini çıkarmak istersem listede görünmeyeceğinden sorun yaşarım diye düşündüm.
Şu anda geçici tabloda ekli olanlar, formu yeniden açtığımda işaretli olarak geliyor. Eğer işaretlilerden birini çıkarmak istersem, işaretlerini kaldırdıktan sonra geçici tabloyu boşaltıp yeni haliyle ekleme yaptırmayı düşünüyorum.


Ozan Bey,

Çözümünüz için çok teşekkürler, ekli olanların hepsinin isimlerini getirmeyi başaramamıştım. Bu çözümü de kesinlikle saklayacağım...