aynı tckimlik nolu kişiyi kaydettirmeme

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Kullanıcı avatarı
huseyinert
Üye
Mesajlar: 233
Kayıt: 19 Nis 2005 06:49
Konum: Bartın

aynı tckimlik nolu kişiyi kaydettirmeme

Mesaj gönderen huseyinert »

merhaba arkadaşlar kayıt girişinde tckimlik no bölümünü girdikten sonra kaydet dediğimizde vt. nın da aynı tckimlik nolu kayıt varsa bu kayıt var şeklinde bir uyarı verip kaydetme işlemini iptal ettirmek istiyorum.
bunun için locate kullandım ama çalışmıyor. kullandığım kod şu şekilde

if query1.locate('tc',query1.fieldbyname('tc').value,[]) then
Showmessage('kayıt var')
else
query1.post;
"Kula bela gelmez Hak yazmayınca,Hak bela yazmaz kul azmayınca..." MEVLANA
Kullanıcı avatarı
lazio
Moderator
Mesajlar: 1527
Kayıt: 11 Tem 2003 04:55
Konum: İstanbul

Mesaj gönderen lazio »

bence locate kullanma :!:
bunun yerine, tablonu kaydetmeden önce (before bost olayı) bir query ile kaydın olup olmadığını kontrol et. kayır varsa Abort; et
DeveloperToolKit

..::|YeşilMavi|::..
zyildiz
Üye
Mesajlar: 115
Kayıt: 09 Mar 2004 01:22
Konum: Adapazarı

Mesaj gönderen zyildiz »

Selamunaleykum

kullandıgınız vt yi yazsaydınız daha iyi olurdu.
bu işlemi select sorgusuyla yapsanız daha hızlı ve daha garanti sonuc alacagınız kanaatindeyim.

Kod: Tümünü seç

SELECT tckimlik FROM xxx

bunu bir querynin icine yazıp 

if query.recordcount = 0 Then
  Begin
boyle bir kayıt yok  
  end else
 begin
boyle bir kayıt var
end;
gibi kullanabilirsin
Kullanıcı avatarı
huseyinert
Üye
Mesajlar: 233
Kayıt: 19 Nis 2005 06:49
Konum: Bartın

Mesaj gönderen huseyinert »

aleyküm selam
teşekkür ederim veri tabanı olarak interbase kullanıyorum
"Kula bela gelmez Hak yazmayınca,Hak bela yazmaz kul azmayınca..." MEVLANA
Kullanıcı avatarı
lazio
Moderator
Mesajlar: 1527
Kayıt: 11 Tem 2003 04:55
Konum: İstanbul

Mesaj gönderen lazio »

interbase kullanıyorsan bu kontrol işini trigger ile yapabilirsin.
DeveloperToolKit

..::|YeşilMavi|::..
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Mesaj gönderen vkamadan »

merhaba ,
@zyildiz' in önerisine ilave olarak,
bence genelde TQuery nin Recordcount özelliğine güvenmeyin eğer kayıt kontrolü yapılacaksa bence daha güvenilir olması açısından TQuery.IsEmpty fonksiyonu kullanın.
iyi çalışmalar.
Volkan KAMADAN
www.polisoft.com.tr
Kullanıcı avatarı
huseyinert
Üye
Mesajlar: 233
Kayıt: 19 Nis 2005 06:49
Konum: Bartın

Mesaj gönderen huseyinert »

teşekkür ederim ama çalıştıramadım kodlamayı şu şekilde yaptım
data.hastakayit.Close;
data.hastakayit.SQL.Clear;
data.hastakayit.SQL.Add('select *from hastakayit where tckimlikno='+data.hastakayit.fieldbyname('tckimlikno').Value);
data.hastakayit.Open;

if data.hastakayit.RecordCount=0 then
begin
data.hastakayit.Post;
end
else begin
Application.MessageBox('kayıt var','Uyarı',0+48);
end;

acaba nerede problem var
"Kula bela gelmez Hak yazmayınca,Hak bela yazmaz kul azmayınca..." MEVLANA
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Mesaj gönderen vkamadan »

merhaba ,
database de tckimlik alanınız numeric bir değerse sorun yok gibi görünüyor ama numeric değilse ozaman query e eklediğiniz cümleyi şu şekilde değiştiriniz.

Kod: Tümünü seç

data.hastakayit.SQL.Add('select *from hastakayit where tckimlikno='+''''+data.hastakayit.fieldbyname('tckimlikno').Value)+''''; 

iyi çalışmalar.
Volkan KAMADAN
www.polisoft.com.tr
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7603
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

en garantisi ve doğrusu unique index tanımlamak hocam. Ağa babası gelse kaydedemez ikinciyi :D

Kolay gelsin.
Uğur1982
Üye
Mesajlar: 383
Kayıt: 11 Mar 2005 03:18
Konum: İzmir

Mesaj gönderen Uğur1982 »

merhaba;
huseyinert yazdı:teşekkür ederim ama çalıştıramadım kodlamayı şu şekilde yaptım
data.hastakayit.Close;
data.hastakayit.SQL.Clear;
data.hastakayit.SQL.Add('select *from hastakayit where tckimlikno='+data.hastakayit.fieldbyname('tckimlikno').Value);
data.hastakayit.Open;

if data.hastakayit.RecordCount=0 then
begin
data.hastakayit.Post;
end
else begin
Application.MessageBox('kayıt var','Uyarı',0+48);
end;

acaba nerede problem var
şöyle yapabilirsin benim yaptığım gibi

Kod: Tümünü seç

e1tut:=e1.Text;
With IBQuery1 do
   begin
     close;    
     SQL.Clear ;
     SQL.Add('select * from CARIKART where KOD='''+e1tut+'''');
     try
        open;
     except

     Showmessage('Hata : '+IBQuery1.Text);
     end;{try}
   end;{with}

   if IBQuery1.FieldByName('kod').Value<>null then
     showmessage('Kayıt var'); 
   else
  showmessage('Kayıt yok'); 
iyi günler....
Kullanıcı avatarı
TRSoft
Kıdemli Üye
Mesajlar: 636
Kayıt: 13 Şub 2004 11:39
Konum: Konya
İletişim:

Mesaj gönderen TRSoft »

Birşey dikkatimi çekti eğer o an bilgi girdiğiniz query ile sorguyu yaptığınız query aynı ise ki yukarıdaki kodlardan anladığım kadarıyla öyle zaten sonuca ulaşmanız imkansız. Sorgunuzu farklı bir query ile yapmalısınız.

Ayrıca bende kesinlikle @mussimsek hocamın fikrine katılıyorum..
İlimle geçen bir gece,
ibadetle geçen bin geceden hayırlıdır.
HZ. MUHAMMED (S.A.)
Ali Erdoğan
Kıdemli Üye
Mesajlar: 1026
Kayıt: 11 Şub 2005 02:12
Konum: İstanbul

Mesaj gönderen Ali Erdoğan »

Kod: Tümünü seç

Qr.Active:=false;
Qr.Sql.Clear();
Qr.Sql.Add('Select count(*) as kayitsayisi from tblHastkayit where tcno='+tcno);
Qr.Active:=true;

if Qr.Fieldbyname('kayitsayisi').asinteger > 0 then
  begin
    showmessage('Bu Kayıt Zaten Var!');
  end
else
  begin
    table.post;
  end;
tekrarsız index kadar olmasa da etkili bir yöntem
mkysoft
Kıdemli Üye
Mesajlar: 3110
Kayıt: 26 Ağu 2003 12:35
Konum: Berlin
İletişim:

Mesaj gönderen mkysoft »

locate komutuda kullanılabilir ama komutu yanlış kullanmışsın. tercih senin. bende mussimek'e katılıyorum unique yapmak en iyisi.
locate şu şekilde

Kod: Tümünü seç

if query1.locate('tc',varofarray([query1.fieldbyname('tc').value]),[]) then 
Showmessage('kayıt var') 
else 
query1.post;
şeklinde olmalı. burda bir yanlışlık daha var. queryi locate ettiğin için insert olayın iptal olur. qury insert etmeden önce girilne bilgiye göre kontrol yapmalısın. bu nedenle lookup kullanabilirsin.
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7603
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

arkadaşlar diğer yöntemlerin hepsinde ŞİŞERSİNİZ.... ne kadar iyi kod yazarsanız yazın, kullanıcılar bir şekilde ikinci kayıdı yapacaktır. Yıllarca aynı yöntemleri uygulamış biri olarak, kullanıcının nasıl data kaydedebildiğine şaşarsınız. Az uğraşmadım bu tip yanlış datalarla :)

Tek yol unique index.

Kolay gelsin.
Kullanıcı avatarı
huseyinert
Üye
Mesajlar: 233
Kayıt: 19 Nis 2005 06:49
Konum: Bartın

teşekkürler

Mesaj gönderen huseyinert »

arkadaşlar hepinize teşekkür ederim işlemi gerçekleştirdim
"Kula bela gelmez Hak yazmayınca,Hak bela yazmaz kul azmayınca..." MEVLANA
Cevapla