Firebird ve Interbase veritabanları ve SQL komutlarıyla ilgli sorularınızı sorabilirsiniz. Delphi tarafındaki sorularınızı lütfen Programlama forumunda sorunuz.
Burhan_ast
Üye
Mesajlar: 143 Kayıt: 15 Haz 2003 08:33
Konum: Almaty, Kazakhstan
Mesaj
gönderen Burhan_ast » 18 Kas 2015 01:15
Merhaba Arkadaslar
Firebird 2.5.4 kullaniyorum, baglanti icin ODBC + ADO ile baglaniyorum. Tablomda autoincremen alanim var. Kayit sonrasi alanin degeri bos donuyor. Ayni kod ADO ile ms-sql baglandigimda ise donuyor.
Kod: Tümünü seç
ADOQERY_Order.Close;
ADOQERY_Order.Sql.Clear;
ADOQERY_Order.Sql.Add('SELECT *');
ADOQERY_Order.Sql.Add('FROM ASMSA_1000_ORDER');
ADOQERY_Order.ExecSQL;
ADOQERY_Order.Open;
ADOQERY_Order.INSERT;
ADOQERY_Order.FieldByName('ACIKLAMA').asString := 'm-124';
ADOQERY_Order.Post;
//KAYIT VERITABANINA EKLENMIS VE VERITABANINDA KAYITNO ALANI ORNEGIN 12,
//AMA BENIM PROGRAMDA KAYITNO ALANI 0 OLARAK GERIYE DONUYOR
ShowMessage('KayitNo : ' + inttostr(ADOQERY_Order.FieldByName('KAYITNO').asINTEGER));
ADOQERY_Orderline.Close;
ADOQERY_Orderline.Sql.Clear;
ADOQERY_Orderline.Sql.Add('select *');
ADOQERY_Orderline.Sql.Add('From ASMSA_1000_ORDERLINE');
ADOQERY_Orderline.ExecSQL;
ADOQERY_Orderline.Open;
For k:=1 to 10 do
Begin
ADOQERY_Orderline.INSERT;
ADOQERY_Orderline.FieldByName('ORDERID').asINTEGER := ADOQERY_Order.FieldByName('KAYITNO').asINTEGER;
ADOQERY_Orderline.FieldByName('ACIKLAMA').asString := 'M-'+inttostr(k);
ADOQERY_Orderline.Post;
end;
Burhan Cakmak
ikra
Üye
Mesajlar: 901 Kayıt: 28 Nis 2005 01:26
Konum: Simdilik Topragin Üstü
Mesaj
gönderen ikra » 18 Kas 2015 01:25
Execsql bir query'de insert veya update sql'i kullanildiginda cagirilan bir metoddur. Select modundaki bir query'de exec degil open kullanilir. Siz önce exec sonra open metodunu cagiriyorsunuz.
Sql'iniz select modunda (select from tablo) ve siz insert metodunu cagiriyorsunuz. Bu sekilde tabloya birsey ekleyemezsiniz. Haliyle id'niz de size sifir rakamini döndürür.
Sql textinizi insert olarak degistirin.
kıdemsiz üye
Burhan_ast
Üye
Mesajlar: 143 Kayıt: 15 Haz 2003 08:33
Konum: Almaty, Kazakhstan
Mesaj
gönderen Burhan_ast » 18 Kas 2015 01:32
Merhaba
Bu kod aslinda veritabani olarak MS-SQL baglandigimda calisiyor. Kodu bu sekilde degistiriyorum. Kod Firebirde baglandigimda calismiyor. Tabloya hic bir sey ekleyemiyorum degil, tabloya kayit ekliyorum ve hepsi veritabaninda gozukuyor, sorun KayitNo alanin bana 0 olarak geri donmesi.
Kod: Tümünü seç
ADOQERY_Order.Close;
ADOQERY_Order.Sql.Clear;
ADOQERY_Order.Sql.Add('SELECT *');
ADOQERY_Order.Sql.Add('FROM ASMSA_1000_ORDER');
ADOQERY_Order.Open;
ADOQERY_Order.INSERT;
ADOQERY_Order.FieldByName('ACIKLAMA').asString := 'm-124';
ADOQERY_Order.Post;
//KAYIT VERITABANINA EKLENMIS VE VERITABANINDA KAYITNO ALANI ORNEGIN 12,
//AMA BENIM PROGRAMDA KAYITNO ALANI 0 OLARAK GERIYE DONUYOR
//Veritabani olarak MS-SQL baglandigimda ise kayitno alani 0 degil, aldigi deger geliyor.
ShowMessage('KayitNo : ' + inttostr(ADOQERY_Order.FieldByName('KAYITNO').asINTEGER));
ADOQERY_Orderline.Close;
ADOQERY_Orderline.Sql.Clear;
ADOQERY_Orderline.Sql.Add('select *');
ADOQERY_Orderline.Sql.Add('From ASMSA_1000_ORDERLINE');
ADOQERY_Orderline.Open;
For k:=1 to 10 do
Begin
ADOQERY_Orderline.INSERT;
ADOQERY_Orderline.FieldByName('ORDERID').asINTEGER := ADOQERY_Order.FieldByName('KAYITNO').asINTEGER;
ADOQERY_Orderline.FieldByName('ACIKLAMA').asString := 'M-'+inttostr(k);
ADOQERY_Orderline.Post;
end;
Kuri_YJ
Moderator
Mesajlar: 2248 Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:
Mesaj
gönderen Kuri_YJ » 28 Kas 2015 10:45
Selamlar,
IBX Bileşenleri kullansanız bu sıkıntınız olmayacak. Onlarda doğrudan GENERATOR kullanımı yapabilirsiniz. Veya FIBPlus componentleri de aynı şekilde.
Kolay Gelsin