Mükerre Kayıt

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
Kullanıcı avatarı
haydarxxx
Üye
Mesajlar: 668
Kayıt: 09 May 2005 11:31
Konum: izmir

Mükerre Kayıt

Mesaj gönderen haydarxxx »

Aşağıda ki kod ile aynı veri girişini tekrarlmasını istemiyorum programın

Kod: Tümünü seç

var
b:string;
a:integer;
begin

IBQuery1.close;
IBQuery1.sql.text:='select * from TBL_DERSLER where DERS_KATILIM=:AYNIDERS';
IBQuery1.parambyname('AYNIDERS').AsString:=(QRY_DERSLER.FieldByname('DERS_KATILIM').Asstring);
IBQuery1.open;
if not IBQuery1.Isempty then
  begin

b := QRY_DERSLER.FieldByname('DERS_KATILIM').Asstring+ '  Dersi Daha Önce Atanmış.Lütfen başka bir ders seçiniz';
a:=application.MessageBox (PChar(b),'Dikkat',+mb_iconwarning);

      abort;
      QRY_DERSLER.append;

QRY_DERSLER.FieldByName('DERS_KATILIM').Value:= DBLookupComboBox1.Text;
QRY_DERSLER.FieldByName('HF_SAAT').Value:=FORM2.QRY_DERSGIRIS.FieldByName('HF_DERS_SAATI').Value;
QRY_DERSLER.post;
QRY_DERSLER.active:=false;
QRY_DERSLER.active:=true;
IBTransaction1.CommitRetaining;
ilk kaydı atama yaptığımda örneğin (TÜRKÇE) bir sorun yok ama ikinci ve farklı bir kaydı atamaya kalktığımda örneğin (MATEMATİK) TÜRKÇE kayıdı var diyor oysaki farklı bir kayıt giriyorum ama hala o ilk atadığım kayıttta bir türlü yeni verileri atayamıyorum bu kodda ne sorun var paradoxta çalışıyor bu kod.
Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2248
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Mesaj gönderen Kuri_YJ »

Size de SELAM :)

Kod: Tümünü seç

IBQuery1.parambyname('AYNIDERS').AsString:=(QRY_DERSLER.FieldByname('DERS_KATILIM').Asstring);
bu satırda, Qry_Dersler, o anda hangi kayıtta olduğuna dair bir bilginiz var mı?

Trace edin ve o satırda Field'ların değerlerine dikkat edin.

Daha sonra sorgunuzda bir gariplik var gibi sezinledim ama bu tabloların structurelarını verin.

Kolay Gelsin
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Kullanıcı avatarı
haydarxxx
Üye
Mesajlar: 668
Kayıt: 09 May 2005 11:31
Konum: izmir

Mesaj gönderen haydarxxx »

Selam hocam (Kusurabakmayın öyle dalmışız olaya)

dediğiniz konuda da bu kodlar içinde çok fikrim yok

QRY_DERSLER (IBdataset im).Tablo alanlarım

DERS_ID
OGRENCİ_ID
DERS_KATILIM
HF_SAAT

umarım bu bilgiler yeterli olur
Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2248
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Mesaj gönderen Kuri_YJ »

Selamlar,

Bu bilgiler pek yeterli değil.

Mantıuk olarak yapmanız gerekenden bahsedelim.

1. Önce bir tane IBQuery koyun forma, ama sadece bu sorgu için kullanın, başka bir şey içinkullanmayın (Karışıklığa meydan vermemek için).

2. Bu Query'e SELECT COUNT(*) sorgunuzu yazın, ve bu sorgu, sizin Devam Takip yaptığınız ilgili ders için, ilgili tarih için (varsa tabiki) parametreleri belirleyip, Query'i açın.

3. Sonra dönen sayıya bakın, 0 mı değil mi? Eğer sıfır ise almamıştır, eğer sıfır değilse almış demektir.

Ayrıca gönderdiğiniz kod komple hatalı görünüyor,

if not IBQuery1.Isempty then
begin

denmiş ama begin in end'i yok, ayrıca arada bir adet Abort görüyorum. İşlem ne olursa olsun o Begin'e girdimi hatayı verir çıkar, Abort var zira arada.

Bence bu kontrolu ayrıca yeniden yazın. Bu kodla bir yere götüremezsiniz, düzeltene kadar, sıfırdan 10 defa yazarsınız bu kontrolu. Ki olay basit :)

Kolay Gelsin
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Kullanıcı avatarı
haydarxxx
Üye
Mesajlar: 668
Kayıt: 09 May 2005 11:31
Konum: izmir

Mesaj gönderen haydarxxx »

hocam Slm uzun bir aradan sonra cevaplayabildim

Kod: Tümünü seç

procedure TForm1.DBLookupComboBox1Click(Sender: TObject);
begin
IBQuery1.close;
IBQuery1.sql.text:='select*From TBL_DERSLER where DERS_KATILIM='''+DBLookupComboBox1.Text+''' ';
IBQuery1.open;

if IBQuery1.RecordCount=0 then
begin
QRY_DERSLER.append;
QRY_DERSLER.FieldByName('DERS_KATILIM').Value:=DBLookupComboBox1.Text;
QRY_DERSLER.FieldByName('HF_SAAT').Value:=FORM2.QRY_DERSGIRIS.FieldByName('HF_DERS_SAATI').Value;
QRY_DERSLER.post;
end
else
 showmessage ('Bu kayıt daha önce girilmiş');
  end;
bu şekilde de bir düzenleme yaptım ilk kaydı kaydediyor ikinci kayıt farklı bir isimde olmasına rağmen bu kayıt girilmiştir uyarısı alıyorum.Oysaki bir isteğe gere aratma yapmama rağmen.
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

@Kuri_YJ'nin dediği şekilde bağımsız bir TIBQuery ile ve Count(*) AS KaySay şeklinde sorgu yaparsanız gerçek sayıyı elde edersiniz. RecordCount, diğer veritabanlarında işe yarayabilier ama TIBQuery için aynı şekilde uygun bir sorgulama değildir.
Resim
Resim ....Resim
Kullanıcı avatarı
haydarxxx
Üye
Mesajlar: 668
Kayıt: 09 May 2005 11:31
Konum: izmir

Mesaj gönderen haydarxxx »

hocam bir örnek yazarsanız sevinirim.Çünkü ben kayıt sayılarını RecordCount kullanarak alıyorum ve aşağıdaki şekilde düzenleme yaptım ama olmadı yine :oops:

Kod: Tümünü seç

IBQuery5.close;
IBQuery5.sql.text:='Select Count(*) As KaySay TBL_DERSLER where DERS_KATILIM='''+DBLookupComboBox1.Text+''' ';
IBQuery5.open;

if IBQuery5.RecordCount=0 then
...........
.......... teşekkürler
Kullanıcı avatarı
bobasturk
Kıdemli Üye
Mesajlar: 1387
Kayıt: 20 May 2004 08:39
Konum: Düzce

Mesaj gönderen bobasturk »

Merhaba,

query nin sql sini clear yapmıyorsunuz ve query eski sorguyu size döndürüyor.

query2.close;
query2.sql.clear;

kolay gelsin
Şefkat-u Merhamette Güneş Gibi Ol.
Başkalarının Kusurunu Örtmekte Gece Gibi Ol.
Sehavet-u Cömertlikte Akarsu Gibi Ol.
Hiddet-u Asabiyette Ölü Gibi Ol.
Tevazu-u Mahviyette Toprak Gibi Ol.
Ya Olduğun Gibi Görün Ya Göründüğün Gibi Ol.

Resim
Kullanıcı avatarı
haydarxxx
Üye
Mesajlar: 668
Kayıt: 09 May 2005 11:31
Konum: izmir

Mesaj gönderen haydarxxx »

hocam denemedim ama unique index tanımlama ve hata yakalama işlemi ile sorunumu çözdüm.Teşekkür ediyorum
Kullanıcı avatarı
rsimsek
Admin
Mesajlar: 4482
Kayıt: 10 Haz 2003 01:48
Konum: İstanbul

Mesaj gönderen rsimsek »

haydarxxx yazdı:hocam bir örnek yazarsanız sevinirim.Çünkü ben kayıt sayılarını RecordCount kullanarak alıyorum ve aşağıdaki şekilde düzenleme yaptım ama olmadı yine :oops:

Kod: Tümünü seç

IBQuery5.close;
IBQuery5.sql.text:='Select Count(*) As KaySay TBL_DERSLER where DERS_KATILIM='''+DBLookupComboBox1.Text+''' ';
IBQuery5.open;

if IBQuery5.RecordCount=0 then
...
Buradaki kayıt sayısını alma yöntemi hatalı olmuş. Düzeltmekte fayda var :wink: count(*) ın değerini almak için RecordCount kullanırsanız her zaman 1 değerini alırsınız. Çünkü sözkonusu sorgu tek satırlık bir sonuç döndürür :idea: O yüzden şu şekilde kullanmak gerekiyor;

Kod: Tümünü seç

if IBQuery5.Fields[0].AsInteger > 0 then ... 
ya da

Kod: Tümünü seç

if IBQuery5.FieldByName('KaySay').AsInteger > 0 then ... 
Bilgiyi paylaşarak artıralım! Hayatı kolaylaştıralım!!
Kullanıcı avatarı
haydarxxx
Üye
Mesajlar: 668
Kayıt: 09 May 2005 11:31
Konum: izmir

Mesaj gönderen haydarxxx »

rsimsek Hocam çok sağolasın dediğiniz gibi.Şimdi oldu çok teşekkür ediyorum
Cevapla