Aynı Kayıt Uyarısı [Çözüldü]

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
ozcank
Üye
Mesajlar: 937
Kayıt: 28 Nis 2005 05:29

Aynı Kayıt Uyarısı [Çözüldü]

Mesaj gönderen ozcank »

Arkadaşlar Merhaba;
Eğer ADOQuery de aynı kayıt varsa veya boş ise uyarı verdiriyorum ama bir türlü farklı bir kayıt olduğunda kayıt ettiremedim. Nerde yanlış yapıyorum bakabilir misiniz?

Exit yerine Abort da kullandım olmadı.

Kod: Tümünü seç

procedure TForm3.BitBtn2Click(Sender: TObject);
begin
MADENKAYIT.Close;
MADENKAYIT.Open;

  DBEdit1.Text := Trim(DBEdit1.Text);
  if (DBEdit1.Text = EmptyStr) then
  begin
    Application.MessageBox('Öğrenci Çember Kodu ve TC. Kimlik No Boş Geçilemez !!!','Bilgilendirme Mesajı',MB_ICONINFORMATION);
    Exit;
  end
Else
        if MADENKAYIT.RecordCount>0 then
        begin
            MessageBoxW(Handle, 'Aynı Çember Kodun da Öğrenci Kaydı Var !!!',
            'Uyarı', MB_OK + MB_ICONSTOP + MB_DEFBUTTON2);
            DBEdit1.SetFocus;
            Exit;
        end
Else
///////////////////////////////////////////////////////////
MADENKAYIT.FieldByName('MD_CEMKODU').AsString := DBEdit1.Text;
MADENKAYIT.FieldByName('MD_ADSOYAD').Value:=DBEdit2.Text;
MADENKAYIT.FieldByName('MD_SINIFI').Value:=DBEdit3.Text;
MADENKAYIT.FieldByName('MD_TCKIMLIK').Value:=DBEdit30.Text;
MADENKAYIT.FieldByName('MD_OGRNO').Value:=DBEdit31.Text;
MADENKAYIT.FieldByName('MD_NUFKAYIL').Value:=ComboBox1.Text;
MADENKAYIT.FieldByName('MD_DOGYERI').Value:=ComboBox2.Text;
MADENKAYIT.FieldByName('MD_DOGTARIHI').AsDateTime:=DateTimePicker1.Date;



En son ozcank tarafından 27 Kas 2016 11:29 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
ihalilcoban
Üye
Mesajlar: 121
Kayıt: 10 Ara 2015 10:39

Re: Aynı Kayıt Uyarısı

Mesaj gönderen ihalilcoban »

Else leri kaldırırsan çalışması lazım.
ozcank
Üye
Mesajlar: 937
Kayıt: 28 Nis 2005 05:29

Re: Aynı Kayıt Uyarısı

Mesaj gönderen ozcank »

Deniyorum
Kullanıcı avatarı
greenegitim
Üye
Mesajlar: 713
Kayıt: 28 Nis 2011 10:33
Konum: İstanbul

Re: Aynı Kayıt Uyarısı

Mesaj gönderen greenegitim »

else den sonra birden fazla satır kullanılacaksa o else blogunun da bir begin ve end i olmalı
Mücadele güzelleştirir!
ozcank
Üye
Mesajlar: 937
Kayıt: 28 Nis 2005 05:29

Re: Aynı Kayıt Uyarısı

Mesaj gönderen ozcank »

Bu şekilde değiştirdim bu sefer aynı kayıt var diyor ama yine de kaydediyor.

Kod: Tümünü seç

procedure TForm3.BitBtn2Click(Sender: TObject);
begin
  DBEdit1.Text := Trim(DBEdit1.Text);
  if (DBEdit1.Text = EmptyStr) then
  begin
    Application.MessageBox('Öğrenci Çember Kodu ve TC. Kimlik No Boş Geçilemez !!!','Bilgilendirme Mesajı',MB_ICONINFORMATION);
    Exit;
  end;

        if MADENKAYIT.Locate('MD_CEMKODU' ,DBEdit1.Text,[]) then
        begin
            MessageBoxW(Handle, 'Aynı Çember Kodun da Öğrenci Kaydı Var !!!',
            'Uyarı', MB_OK + MB_ICONSTOP + MB_DEFBUTTON2);
            DBEdit1.SetFocus;
        Abort;
      end;
///////////////////////////////////////////////////////////
MADENKAYIT.FieldByName('MD_KAYITID').AsInteger := StrToInt(Edit4.Text);
MADENKAYIT.FieldByName('MD_CEMKODU').AsString := DBEdit1.Text;
MADENKAYIT.FieldByName('MD_ADSOYAD').Value:=DBEdit2.Text;
MADENKAYIT.FieldByName('MD_SINIFI').Value:=DBEdit3.Text;
ihalilcoban
Üye
Mesajlar: 121
Kayıt: 10 Ara 2015 10:39

Re: Aynı Kayıt Uyarısı

Mesaj gönderen ihalilcoban »

Kod: Tümünü seç

        if MADENKAYIT.Locate('MD_CEMKODU' ,DBEdit1.Text,[]) then
        begin
            MessageBoxW(Handle, 'Aynı Çember Kodun da Öğrenci Kaydı Var !!!',
            'Uyarı', MB_OK + MB_ICONSTOP + MB_DEFBUTTON2);
            DBEdit1.SetFocus;
        Exit;
      end Else
      Begin
///////////////////////////////////////////////////////////
MADENKAYIT.FieldByName('MD_KAYITID').AsInteger := StrToInt(Edit4.Text);
MADENKAYIT.FieldByName('MD_CEMKODU').AsString := DBEdit1.Text;
MADENKAYIT.FieldByName('MD_ADSOYAD').Value:=DBEdit2.Text;
MADENKAYIT.FieldByName('MD_SINIFI').Value:=DBEdit3.Text;
End; 
bu şekilde dener misin?
ozcank
Üye
Mesajlar: 937
Kayıt: 28 Nis 2005 05:29

Re: Aynı Kayıt Uyarısı

Mesaj gönderen ozcank »

Denedim olan kayda da olmayan kayda da mesajı veriyor ve kaydediyor.
ihalilcoban
Üye
Mesajlar: 121
Kayıt: 10 Ara 2015 10:39

Re: Aynı Kayıt Uyarısı

Mesaj gönderen ihalilcoban »

Ben Locate vs. gibi işlemlerle uğraşmak yerine şu şekilde bir yol izliyorum.

1. Boş geçilmesini istemediğim alanları ilgili datasetin BeforePost olayında kontrol ettiriyorum.

Kod: Tümünü seç

If Trim(DM.KURSIYERTC_KIMLIK_NO.Text)='' Then
   Begin
   Application.MessageBox('Tc Kimlik Nosunu Giriniz!','Uyarı Mesajı',MB_ICONWARNING+MB_ok);
   Kursiyer_Karti.DBEdit1.SetFocus;
   Abort;
   End;
2. Aynı TC Kimlik No daha önce girilmiş mi onu da kontrol etmek için önce veritabanında bir adet TC_KIMLIK_NO_X adında index tanımlıyorum ve bunu da Unique olarak işaretliyorum. Bu arada kullandığım veritabanı firebird. Sonra delphi tafarında da yine ilgili datasetin OnPostError olayına;

Kod: Tümünü seç

if Pos('TC_KIMLIK_NO_X', E.Message)>0 then
    begin
    Application.MessageBox('Bu Üye Daha Önce Kaydedilmiş !!!','Uyarı Mesajı', MB_OK + MB_ICONERROR);
    Action := daAbort;
    Kursiyer_Karti.DBEdit1.SetFocus;
    end;
kodu yazıyorum. Bu şekilde kontrolleri sağlıyorum.
ozcank
Üye
Mesajlar: 937
Kayıt: 28 Nis 2005 05:29

Re: Aynı Kayıt Uyarısı

Mesaj gönderen ozcank »

Ben ADOQuery kullanıyorum sanırım olur deniyorum şimdi.
ozcank
Üye
Mesajlar: 937
Kayıt: 28 Nis 2005 05:29

Re: Aynı Kayıt Uyarısı

Mesaj gönderen ozcank »

Olmadı ama sanırım MSSQL de o alanı index yapmalıyım ama nasıl ?
Numeric olmadı
int olmadı
ihalilcoban
Üye
Mesajlar: 121
Kayıt: 10 Ara 2015 10:39

Re: Aynı Kayıt Uyarısı

Mesaj gönderen ihalilcoban »

Ben TC Kimlik No alanını String20 olarak tanımladım. MYSQL de de olur diye düşünüyorum.
ozcank
Üye
Mesajlar: 937
Kayıt: 28 Nis 2005 05:29

Re: Aynı Kayıt Uyarısı

Mesaj gönderen ozcank »

Bu hatayı nasıl Türkçe yapabilirim?

---------------------------
Madenprj1
---------------------------
Violation of PRIMARY KEY constraint 'PK_TBLMADENKAYIT'. Cannot insert duplicate key in object 'dbo.TBLMADENKAYIT'. The duplicate key value is (1 )
---------------------------
Tamam
---------------------------
ihalilcoban
Üye
Mesajlar: 121
Kayıt: 10 Ara 2015 10:39

Re: Aynı Kayıt Uyarısı

Mesaj gönderen ihalilcoban »

Hatayı kullanıcıya göstermek için mi Türkçe yapacaksın yoksa ne anlama geldiğini mi öğrenmek istiyorsun?
ozcank
Üye
Mesajlar: 937
Kayıt: 28 Nis 2005 05:29

Re: Aynı Kayıt Uyarısı

Mesaj gönderen ozcank »

yok kullanıcıya göstermek için "Bu Kod da Öğrenci Var" şeklinde.
ihalilcoban
Üye
Mesajlar: 121
Kayıt: 10 Ara 2015 10:39

Re: Aynı Kayıt Uyarısı

Mesaj gönderen ihalilcoban »

Hata PRIMARY KEY yani birincil anahtar olarak tanımladığın alandan geliyor öğrenci kodu alanından değil. PRIMARY KEY otomatik artan ve benzersiz olarak tanımlamalısın. Öğrencinin kodunu da DOUBLE PRECISION (Reel Sayı) olarak tanımlamalısın. Sonrasında öğrenci kodu alanı için index tanımlayıp daha önceki mesajımda belirttiğim adımları takip edebilirsin. Veri tabanı yapını bilemediğim için aklıma gelen çözüm yöntemlerini yazdım. Umarım işine yarar.
Cevapla