Aynı Kayıt Uyarısı [Çözüldü]
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Re: Aynı Kayıt Uyarısı
Tşk. Ederim ihalilcoban kardeşim.
Re: Aynı Kayıt Uyarısı
Merhaba,ozcank yazdı: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;
Öncelikle gönderdiğiniz kod ile ilgili daha önce de öneride bulunmuştum. "begin..end", "try..finally..end" gibi ifadelerin arasında kalan kod bloklarını en az iki karakter içeriden yazmaya özen göstermek gerekli. Zira kodun işleyişini gözle takip etme konusunda çok büyük faydaları vardır. Ancak, bazı blokları 2 karakter, bazılarını 4 karakter boşluk ile yazmamak gerekli. Bu durumda faydadan çok karışıklığa sebep verebilir.
Yukarıdaki kod işleyişinde kayıt olmadığı zaman sadece aşağıdaki satır çalışacaktır.
Kod: Tümünü seç
MADENKAYIT.FieldByName('MD_CEMKODU').AsString := DBEdit1.Text;
Kod: Tümünü seç
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
Ayrıca, sorun olan kod ile ilgili fonksiyon/prosedürün tamamını forum ile paylaşmanız önemli. Gönderdiğiniz kodun alt kısımlarında ne yazdığını bilemiyoruz. Sadece paylaştığınız hata mesajından bir noktada MADENKAYIT.Post() gibi bir kod olduğunu varsayabiliyoruz.
Sorunuza gelince;
Abort() sessiz bir anormal durum (exception) oluşturur. Abort'un kullanım yeri olarak aklıma gelen en uygun yerlerden bir tanesi TDataSet.BeforePost() olayıdır. Burada çalışan Abort kayıt girişini iptal edecektir. Bunun haricinde yukarıdaki kod içinde Abort ile bir çözüme ulaşmak mümkün değil.
Daha önceki sorularınız ile birleştirildiği zaman; eğer buton tıklandığı sırada MADENKAYIT (DataSet) Edit veya Insert modunda ise, Siz bu DataSet'i kapatıp yeniden açarak bu durumu (state) değiştiriyorsunuz. Başka bir ifade ile kayıt giriş/değişiklik modundan çıkmış oluyorsunuz. Yapmak istediğinize benzer aramaları ayrı bir fonksiyon/prosedür içinde, farklı bir TAdoQuery kullanarak yapmanızda fayda var. Böylece veri girişi yaptığınız MADENKAYIT içinde Locate() kullanmanıza gerek kalmayacaktır. Aramayı yapacak prosedür/fonksiyonu kullanmanız yeterli olacaktır.
Örnek olması açısından arama için aşağıdaki şekilde bir kod yazılabilir:
Kod: Tümünü seç
function RecordExists(const Code: string): Boolean;
var
Query: TAdoQuery;
begin
Query := TAdoQuery.Create(nil);
try
Query.Connection := <Buraya bağlantı bileşen adı yazılmalı>
Query.SQL.Text := 'select MD_CEMKODU from <Buraya database tablo adı yazılmalı> where MD_CEMKODU = :Kod';
Query.Parameters[0].Value := Code;
Query.Open();
Result := Query.RecordCount > 0;
finally
Query.Free();
end;
end;
Kod: Tümünü seç
procedure TForm1.Button1Click(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 RecordExists(DBEdit1.Text) then
begin
MessageBoxW(Handle, 'Aynı Çember Kodun da Öğrenci Kaydı Var !!!', 'Uyarı', MB_OK + MB_ICONSTOP + MB_DEFBUTTON2);
DBEdit1.SetFocus();
Exit();
end;
///////////////////////////////////////////////////////////
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;
end;
Re: Aynı Kayıt Uyarısı
ertank kardeşim çok teşekkür ederim sorunum verdiğin kod ile halloldu.