Tüm Platformlar için Hızlı Uygulama Geliştirme --->    Kitabımız...      Delphi

Konuyu Paylaş : facebook gplus twitter

Konuyu Oyla:
  • Derecelendirme: 4.5/5 - 2 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Mükerrer Kayıt Kontrolü
#1
Merhaba aşağıdaki kod ile mükerrer kayıt kontrolü yapmaya çalışıyorum integer alanlarda sorun yok. String değer girdiğimde hata ile karşılaşıyorum ŞENER adında bi kullanıcı kaydetmeye çalışıyorum hata veriyor. Burda örenek olarak ŞENER belirtmemin sebebi datada eğer şener adında kayıt varsa yine uyarı vermesi. Database olarak firebird 2.5 kullanıyorum kullanıcı adınıda unique index olarak tanımladım. Burda aynı isim varsa query ile bu hatayı yakalamaya çalışıyorum hatayı nerde yapıyorum bulamadım.



procedure Tf_kullanicikayit.BtnKaydetClick(Sender: TObject);
begin
  if not (EdKulad.Text<>'') then
  begin
  Application.MessageBox('Kullanıcı Adını Giriniz!','EKSİK BİLGİ GİRİŞİ',MB_OK + MB_ICONWARNING);
  EdKulad.SetFocus;
  end else
  if not (EdSifre.Text<>'') then
  begin
  Application.MessageBox('Şifreyi Giriniz!','EKSİK BİLGİ GİRİŞİ',MB_OK + MB_ICONWARNING);
  End else
  begin
  if Dm1.QrKullanici.State=DSinsert then
  begin
    Dm1.QrTemp.close;
    Dm1.QrTemp.SQL.Text:='SELECT * FROM KULLANICI WHERE KULLANICIAD='+Dm1.QrKullaniciKULLANICIAD.AsString;
    Dm1.QrTemp.Open;
  if Dm1.QrTemp.RecordCount>0 then
  begin
  Application.MessageBox('Girilen Kullanıcı Adı Mevcut!','UYARI',MB_OK + MB_ICONWARNING);
  Exit
  end;
  end;
  Dm1.QrKullanici.Post;
  ButonKontrol(False);
  Application.MessageBox('İşlem Başarı İle Tamamlanmıştır!','KAYIT BİLGİLENDİRME',MB_OK + MB_ICONINFORMATION);
  end;

end;



HATA MESAJI
---------------------------
Debugger Exception Notification
---------------------------
Project Okyanus.exe raised exception class EZSQLException with message 'SQL Error:  Dynamic SQL Error SQL error code = -104 Token unknown - line 1, column 43 ş. Error Code: -104. Invalid token The SQL: SELECT * FROM KULLANICI WHERE KULLANICIAD=şener
; '.
---------------------------
Break   Continue   Help   
---------------------------
Cevapla
#2
SELECT * FROM KULLANICI WHERE KULLANICIAD='şener' şeklinde olmalı. Yani string bir ifade olduğu için üstten kesme işaretlerini de sorguna eklemen gerek.

E.O.F.  (End Of Fun )
Rolleyes
Cevapla
#3
Dm1.QrKullaniciKULLANICIAD.AsString bu kısmı mı kesme işareti içine almam gerek
Cevapla
#4
Merhaba,
Dm1.QrTemp.SQL.Text:='SELECT * FROM KULLANICI WHERE KULLANICIAD='+Dm1.QrKullaniciKULLANICIAD.AsString;
satırı
 Dm1.QrTemp.SQL.Text:='SELECT * FROM KULLANICI WHERE KULLANICIAD='+QuotedStr(Dm1.QrKullaniciKULLANICIAD.AsString);
şeklinde olmalı.
While true do; Hayat döngüsü, kısır değildir! Yapılan bir yanlış, o döngünün dışına çıkmanızı sağlayacaktır.
WWW
Cevapla
#5
Fesih hocam Teşekkürler

Şu anda string kayıt kleyebilir duruma geldim FAKAT şener adında kullanıcıyı sorunsuz datama ekledim ŞENER adında yeni bir kullanıcı eklemeye çalıştığımda hata veriyorum burda uniqu index hatası veriyor benim vermek istediğim hata mesajı ekrana gelmiyor

HATA MESAJI
----------------
---------------------------
Debugger Exception Notification
---------------------------
Project Okyanus.exe raised exception class EZSQLException with message 'SQL Error: attempt to store duplicate value (visible to active transactions) in unique index "KULLANICIAD_UNQ_IDX" Problematic key value is (<expression> = 'şener'). Error Code: -803. Invalid insert or update value(s): object columns are constrained - no 2 table rows can have duplicate column values The SQL: INSERT INTO KULLANICI (ID,KULLANICIAD,SIFRE,AD,SOYAD) VALUES (?,?,?,?,?); '.
---------------------------
Break Continue Help
---------------------------
Cevapla
#6
Param kullanmaya alıştır kendini.
Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
Kuvvete dayanamayan adalet aciz, 
Adalete dayanamayan kuvvet zalimdir.
WWW
Cevapla
#7
(17-03-2017, Saat: 13:25)quake16 Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlFesih hocam Teşekkürler

Şu anda string kayıt kleyebilir duruma geldim FAKAT şener adında kullanıcıyı sorunsuz datama ekledim ŞENER adında yeni bir kullanıcı eklemeye çalıştığımda hata veriyorum burda uniqu index hatası veriyor benim vermek istediğim hata mesajı ekrana gelmiyor

HATA MESAJI
----------------
---------------------------
Debugger Exception Notification
---------------------------
Project Okyanus.exe raised exception class EZSQLException with message 'SQL Error:  attempt to store duplicate value (visible to active transactions) in unique index "KULLANICIAD_UNQ_IDX" Problematic key value is (<expression> = 'şener'). Error Code: -803. Invalid insert or update value(s): object columns are constrained - no 2 table rows can have duplicate column values The SQL: INSERT INTO KULLANICI (ID,KULLANICIAD,SIFRE,AD,SOYAD) VALUES (?,?,?,?,?); '.
---------------------------
Break   Continue   Help  
---------------------------

Veri tabanında isim alanının Unique olması; aynı isimli ikinci bir kayıt ekleyemeyeceğiniz anlamına gelir. 
Bunu bilinçli yaptı iseniz sorun yok.
Çözüm için;
1- KULLANICIAD alanınızı bir DBA programı ile Unique özelliğini pasifleştirin.
yada
2- Query veya Connection nesnenizin OnError/OnExecuteerror metodlarında ilgili hatayı yakalayabilir, son kullanıcıya kendi hata mesajınızı yansıtabilirsiniz.
While true do; Hayat döngüsü, kısır değildir! Yapılan bir yanlış, o döngünün dışına çıkmanızı sağlayacaktır.
WWW
Cevapla
#8
Selam,

if Dm1.QrTemp.RecordCount>0 then

begin

şeklinde query lerde recordcount kullanmayınız büyük sorunlara yok açabilir. Bu kod yerine kullanici tablonuzda bir id yada kod alanınız varsa ki vardır.

if Dm1.QrTempId.AsInteger>0 then
 begin

şeklinde kullanın. Ayrıca buna bağlı olarak ta;

For x:=1 to Dm1.QrTemp.RecordCoun Do Begin
şeklinde de sakın ola kullanmaya çalışmayın, bunun yerine;

Dm1.QrTemp.First;
While Not Dm1.QrTemp.EOF Do Begin
Dm1.QrTemp.Next;

şeklinde kullanım uygun olacaktır.
Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
WWW
Cevapla
#9
(17-03-2017, Saat: 13:01)quake16 Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye Olkullanıcı adınıda unique index olarak tanımladım.

Kullanıcı adı ya da daha doğrusu isim içeren herhangi bir alanı UNIQUE olarak tanımlamak veritabanı dizaynı için biraz sıkıntılı bir iş. ID,SIRANO vb. alanları bu şekilde kullan tabi ki, ama aynı isimden mutlaka çıkacaktır. O yüzden sürekli index sıkıntısı yaşayabilirsin. Bence UNIQUE index tanımlamanı başka bir benzersiz alan için yapman daha doğru olur.

Kolay gelsin.

E.O.F.  (End Of Fun )
Rolleyes
Cevapla
#10
Kafam iyice çorba olmuş durumda
Benim burada yapmak istediğim programda aynı kullanıcı adlarının tekrar edilmesinin önüne geçmekti. Varchar alanlar için unique index tanımlaması yapmak yanlış bir durum mudur yada varchar alanlarında kayıt kontrolü yaptırmanın sıkıntı çıkaracağı durum nedir sonuçta ben burda aynı isimde başka bir kullanıcı olmasının yanlış olabileceğini düşündüm. Bu düşüncem yanlış ta olabilir doğruyu bulmaya çalıştığım için bu konuda sizlerin bilgilerine başvuruyorum sonuçta bilmediğim konuları yada yanlış yaptığım yerleri sizlerin yorumları ile öğrenmeye çalışıyorum

Teşekkürler
Cevapla

Konuyu Paylaş : facebook gplus twitter



Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Hal Kayıt Sistemi Web Servis eyln 37 1.191 29-12-2017, Saat: 13:54
Son Yorum: eyln
  Kayıt silme Dostk 5 286 21-12-2017, Saat: 15:03
Son Yorum: witalihakko
Question program içerisine veritabansız kayıt BY-HAYALET 6 181 09-12-2017, Saat: 12:23
Son Yorum: Abdullah ILGAZ
  Kayıt güncelleme Dostk 0 109 01-12-2017, Saat: 20:43
Son Yorum: Dostk
  Excelden den import sırasında mükerrer kaydı konrol edip farklı işlem yapma musdi42 1 153 14-11-2017, Saat: 12:21
Son Yorum: uparlayan



Konuyu Okuyanlar: 1 Ziyaretçi