IBQuery1.Eof...İstediğimi Yapamıyorum...

Firebird ve Interbase veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Cevapla
ENIGMA55
Üye
Mesajlar: 23
Kayıt: 15 Eki 2006 08:50

IBQuery1.Eof...İstediğimi Yapamıyorum...

Mesaj gönderen ENIGMA55 »

Merhaba arkadaşlar.Projemde T.C.Kimlik bilgisi girişi var.Tabi ki mantık olarak müşteri kayıt eklerken aynı kimlik bilgisi girişini engelleyen aşağıdaki yapıyı kullanıyorum;

Kod: Tümünü seç

procedure TForm1.mukerrer_kayit;
begin 
  with IBQuery1 do
  begin
    close;
    sql.Clear;
    sql.Add('Select * From TABLE1');
    sql.Add('where KIMLIK =:kimlik');
    params[0].AsString:=Edit4.Text; 
    open; 
  end;

  if not IBQuery1.Eof then
  begin
    Application.MessageBox('Bu kişi zaten kayıtlı.Aynı kaydı tekrar giremezsiniz','UYARI !',4+0+48);
  Abort;
  end;
end;
Bazen müşterinin T.C.Kimlik Numarası o an bilinmiyor ve ben daha sonra girmek zorunda kalıyorum.Fakat şöyle bir sıkıntım var;Mesela boş geçsem ya da 'YOK' diye bir kayıt girsem bu sefer de yukarıda kullanılan kod gereği 'Bu kişi zaten kayıtlı.Aynı kaydı tekrar giremezsiniz' uyarısını tekrar veriyor.Burada tıkandım ve kaldım.Yardımcı olursanız sevinirim.
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Eğer mevzu bahsı alan indeksli ve boş geçilemiyecek bir alan değilse basitçe;

Kod: Tümünü seç

procedure TForm1.mukerrer_kayit;
begin
  if trim(Edit4.Text) = '' then
    exit;

  with IBQuery1 do
  begin
    close;
    sql.Clear;
    sql.Add('Select * From TABLE1');
    sql.Add('where KIMLIK =:kimlik');
    params[0].AsString:=Edit4.Text;
    open;
  end;

  if not IBQuery1.Eof then
  begin
    Application.MessageBox('Bu kişi zaten kayıtlı.Aynı kaydı tekrar giremezsiniz','UYARI !',4+0+48);
  Abort;
  end;
end;
şeklinde çözülebilir :wink:
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Kullanıcı avatarı
selimr
Üye
Mesajlar: 556
Kayıt: 16 Eki 2003 02:07

Mesaj gönderen selimr »

niye eof kullanıyorsunuz anlamadım...

saat geç oldu ondanmı anlamadım acaba :)

Kod: Tümünü seç

procedure TForm1.mukerrer_kayit;
begin

  if trim(Edit4.Text) <> '' then
     begin
       ibquery1.close;
       ibquery1.sql.Clear;
       ibquery1.sql.Add('Select KIMLIK From TABLE1 where KIMLIK =:kimlik');
       ibquery1.params[0].AsString:=Edit4.Text;
       ibquery1.open;

          if ibquery1.fieldbyname('KIMLIK').asstring = edit4.text then
             begin
              Application.MessageBox('Bu kişi zaten kayıtlı.Aynı kaydı tekrar giremezsiniz','UYARI !',4+0+48);
              Abort;
             end;
     end;
end;        
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

Ben de aynen kopyalamışım. Doğrusu yukarıdaki gibi bulunanla karşılaştırmak, ya da o kodlu kayıt sayısını bulmak daha kullanışlı;

Kod: Tümünü seç

procedure TForm1.mukerrer_kayit;
begin
  if trim(Edit4.Text) = '' then
    exit;

  with IBQuery1 do
  begin
    Close;
    sql.Clear;
    sql.Add('Select count(*) From TABLE1');
    sql.Add('where KIMLIK =:kimlik');
    params[0].AsString:=Edit4.Text;
    open;
  end;

  if IBQuery1.Fields[0].AsInteger > 0 then
  begin
    Application.MessageBox('Bu kişi zaten kayıtlı.Aynı kaydı tekrar giremezsiniz','UYARI !',4+0+48);
  Abort;
  end;
end;
şeklinde kullanılabilir.
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Cevapla