ibdatasette combobox ile sorgulamada hata msg

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
deltas
Üye
Mesajlar: 358
Kayıt: 06 Mar 2004 01:08
Konum: Malatya...
İletişim:

ibdatasette combobox ile sorgulamada hata msg

Mesaj gönderen deltas »

S.A
Delphi7, firebird 1.5 kullanıyorum.
Sorunum şu : deneme2 isimli bir table oluşturdum. DDL si şöyle:

Kod: Tümünü seç


CREATE TABLE DENEME2 (
    AD   VARCHAR(10) COLLATE PXW_TURK,
    KOD  INTEGER
);
formcreate olayına aşşagıdaki kod ile combobox'ın içini dolduruyorum.

Kod: Tümünü seç

ibdataset2.Open;
ibdataset2.First;
while not ibdataset2.Eof do
begin
combobox1.items.add(ibdataset2.fieldbyname('ad').asstring);
ibdataset2.Next;
end;
Bu kısma kadar bir sorunum yok. Daha sonra form üzerine bir buton koydum ve click özelliği aşşağıdaki kodu yazdım.

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
  var
  a: integer;

begin

IBdataset2.Close;
IBdataset2.selectSQL.Clear;
IBdataset2.selectSQL.Add('select * from deneme2');
IBdataset2.selectSQL.Add('where AD="'+combobox1.Text+'"');
IBdataset2.open;
a:=IBdataset2.Params[1].asinteger;

IBdataset1.Close;
IBdataset1.UnPrepare;
IBdataset1.SelectSQL.Clear;;
IBdataset1.SelectSQL.Add('INSERT INTO DENEME1(SICIL,AD,SOYAD,TARIH1,TARIH2,BIRIMI)');
IBdataset1.SelectSQL.Add('VALUES(:SICIL,:AD,:SOYAD,:TARIH1,:TARIH2,;BIRIMI)');
IBdataset1.Prepare;
IBdataset1.Params[0].AsString:=Edit1.Text;
IBdataset1.Params[1].AsString:=Edit2.Text;
IBdataset1.Params[2].AsString:=Edit3.Text;
IBdataset1.Params[3].AsString:=JvDatePickerEdit1.Text;
IBdataset1.Params[4].AsString:=JvDatePickerEdit2.Text;
IBdataset1.Params[5].Asinteger:=a;
IBdataset1.ExecSQL;
end;
Bu kodda istediğim olay ilk olarak comboboxda seçmiş olduğum değeri dataset2 ile sorgu çekerek karşılığında gelen kodu alsın ve bunu dataset1'e bağladığım tableye yazsın. Dışaradan baktığımda bi sorun görünmüyor ama çalıştırdığımda şu hata mesajını alıyorum:
dynamic SQL error sql error code=-206 column unknov GIH
Ayrıca benim deneme2 tablem ise şu şekilde:
GIH----1
SIH----2
TIH----3
Sorunu çözmek için 3 saattir uraşıyorum ne yaptıysam olmadı. Bi yerde ufak bi ayrıntıyı atlıyorum herhalde... İnterbase bileşelerini yeni kullanmaya başladım. Daha doğrusuöğreniyorum. Bu işlemin benzerini ado ve BDE de sorunsuz çalıştırıyordum ama ibdatasette sorun çıktı. yardım ederseniz memnun olurum.
Teşekkür ederim...
Muhabbetle...
Nice İnsanlar gördüm üstünde elbise yok;
Nice elbiseler gördüm içinde insan yok.
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Mesaj gönderen aslangeri »

s.a.
sanırım sorun her iki tablo içinde aynı ibdataset i kullanmanızdan kaynaklanıyor. ibdataset in sql ini program içğinde değiltirmek mantıklı bir uygulama değil. eğer sql i sürekli değiştirecekseniz ibquery yada ibsql kullanın. ibdatasetin ayarlarını yaptıktan sonra ttable gibi kullanmalısınız.
+
ibdataseti open ettikten sonra paramtereye değer atamaya çalışmışsınız.
+
hatayı hangi satırda verdiğini yazmamışsınız.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
deltas
Üye
Mesajlar: 358
Kayıt: 06 Mar 2004 01:08
Konum: Malatya...
İletişim:

Mesaj gönderen deltas »

Teşekkür ederim sorunu hallettim

Kod: Tümünü seç

procedure TForm1.Button2Click(Sender: TObject);
var
a: integer;
begin
IBQuery1.Close;
IBQuery1.SQL.Clear;
IBQuery1.SQL.Add('Select * From Deneme2 Where AD=:ad');
IBQuery1.ParamByName('Ad').Value:=combobox1.Text;
IBQuery1.Open;
a:=IBQuery1.Fieldbyname('KOD').AsInteger;
ibdataset1.Open;
ibdataset1.insert;
ibdataset1.Append;
ibdataset1.FieldByName('SICIL').AsString:=edit1.Text;
ibdataset1.FieldByName('AD').AsString:=edit2.Text;
ibdataset1.fieldByName('SOYAD').AsString:=edit3.Text;
ibdataset1.fieldByName('TARIH1').AsString:=JvDatePickerEdit1.Text;
ibdataset1.fieldByName('TARIH2').AsString:=JvDatePickerEdit2.Text;
ibdataset1.fieldByName('BIRIMI').AsString:=a;
ibdataset1.Post;
end;
Koduda vereyim dedim. Bu yaptığım işlem ilse combobox önce char ile dolduruluyor sonra kayıt sırasında karşılığındaki kod veritabanına kaydediliyor. Bu işlem sayaseinde kayıtlarda sorgu yapılırken zorlanma yaşamazsınız. Şu anda hazırladığım programda bi çok yerde bu özelliği kullanıyorum. Eğer kişi kaydedecekseniz (mesela maaş programı, Sağlık hizmetlerinde kullanılan programlar gibi) bir çok yerinde bu şekilde kullanırsanız ileride yapacağınız sorgulamalarda kolaylık sağlar.
Bide bu kod var. Oda yukarıdaki ile aynı işlemi yapıyor.

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
var
a: integer;
begin
IBQuery1.Close;
IBQuery1.SQL.Clear;
IBQuery1.SQL.Add('Select * From Deneme2 Where AD=:ad');
IBQuery1.ParamByName('Ad').Value:=combobox1.Text;
IBQuery1.Open;
a:=IBQuery1.Fieldbyname('KOD').AsInteger;
 edit5.Text:=inttostr(a);
IBdataset1.Close;
IBdataset1.UnPrepare;
IBdataset1.SelectSQL.Clear;;
IBdataset1.SelectSQL.Add('INSERT INTO DENEME1(SICIL,AD,SOYAD,TARIH1,TARIH2,BIRIMI)');
IBdataset1.SelectSQL.Add('VALUES(:SICIL,:AD,:SOYAD,:TARIH1,:TARIH2,:BIRIMI)');
IBdataset1.Prepare;
IBdataset1.Params[0].AsString:=Edit1.Text;
IBdataset1.Params[1].AsString:=Edit2.Text;
IBdataset1.Params[2].AsString:=Edit3.Text;
IBdataset1.Params[3].AsString:=JvDatePickerEdit1.Text;
IBdataset1.Params[4].AsString:=JvDatePickerEdit2.Text;
IBdataset1.Params[5].Asstring:=edit5.text;
IBdataset1.ExecSQL;
end;
Muhabbetle....
Nice İnsanlar gördüm üstünde elbise yok;
Nice elbiseler gördüm içinde insan yok.
Cevapla