Kayit sonrasi autoincremen alanin degerini alma

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
Burhan_ast
Üye
Mesajlar: 143
Kayıt: 15 Haz 2003 08:33
Konum: Almaty, Kazakhstan

Kayit sonrasi autoincremen alanin degerini alma

Mesaj gönderen Burhan_ast »

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: 900
Kayıt: 28 Nis 2005 01:26
Konum: Simdilik Topragin Üstü

Re: Kayit sonrasi autoincremen alanin degerini alma

Mesaj gönderen ikra »

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

Re: Kayit sonrasi autoincremen alanin degerini alma

Mesaj gönderen Burhan_ast »

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;
Kullanıcı avatarı
Kuri_YJ
Moderator
Mesajlar: 2247
Kayıt: 06 Ağu 2003 12:07
Konum: İstanbul
İletişim:

Re: Kayit sonrasi autoincremen alanin degerini alma

Mesaj gönderen Kuri_YJ »

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
Kuri Yalnız Jedi
Harbi Özgürlük İçin Pisi http://www.pisilinux.org/
Cevapla