| deltas | 25.07.2005 - 00:30:29 |
| S.A
Delphi7, firebird 1.5 kullanıyorum. Sorunum şu : deneme2 isimli bir table oluşturdum. DDL si şöyle: CREATE TABLE DENEME2 ( AD VARCHAR(10) COLLATE PXW_TURK, KOD INTEGER ); formcreate olayına aşşagıdaki kod ile combobox'ın içini dolduruyorum. 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. 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... | |
| aslangeri | 25.07.2005 - 10:41:30 |
| 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. | |
| deltas | 26.07.2005 - 04:56:52 |
| Teşekkür ederim sorunu hallettim
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. 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.... | |