Bir tablodan digerine kayit aktarmak

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
mrtblt
Üye
Mesajlar: 222
Kayıt: 02 Tem 2007 05:13

Bir tablodan digerine kayit aktarmak

Mesaj gönderen mrtblt »

Merhaba Bir tablodan digerine ilkel bir sekilde kayit aktarmaya calisiyorum.

Yazdigim kod asagidaki gibi.

Kod: Tümünü seç

    dm.q_invheader.Post;
    dm.q_genel.SQL.Clear;
    dm.q_genel.SQL.Add('select * from inv_header order by id DESC');
    dm.q_genel.Open;
    dm.q_genel.First;
    while not (dm.q_invltemp.eof) do
    begin
      q_fat.sql.Clear;
      q_fat.SQL.Add('insert into inv_lines values '','''+dm.q_genel.FieldValues['id']+''','''+dm.q_invltemp.FieldValues['code']+''','''+dm.q_invltemp.FieldValues['adet']+''','''+dm.q_invltemp.FieldValues['unit_rice']+''','''+dm.q_invltemp.FieldValues['line_net']+''','''+dm.q_invltemp.FieldValues['line_vat']+''','''+dm.q_invltemp.FieldValues['line_grand']+''','''+dm.q_invltemp.FieldValues['crn']+'''');
      q_fat.execute;
      dm.q_invltemp.Next;
    end;
    q_fat.close;
Burada 3 tablo mevcut

1 - fatura basliklari - inv_header
2 - fatura satirlari - inv_lines
3 - gecici fatura satirlari - inv_lines_temp

mantik su sekilde.

Fatura satirlari once inv_temp_lines dosyasina kaydediliyor. Kullanici faturayi kaydetmek istediginde, sistem once inv_header dosyasina kayit yapiyor. Daha sonra bu tablo id(autoincrement) numarasina gore DESC siralaniyor. Ve

Kod: Tümünü seç

dm.q_genel.First;
Komutu ile en son kaydini yaptigim faturanin id'sini aliyorum. Cunku bu id inv_lines_temp dosyasindan inv_lines dosyasina kayit aktarilirken inv_lines dosyasinin fat_id kismini yaziliyor master-detail iliskisi icin

Yukaridaki kayit sekli ile kayit yapmayi beceremedim. Zaten benim kullandigim yolda cok mantikli gelmiyor bana. Daha mantikli birsey onerebilecek bir arkadas var mi acaba?
mrtblt
Üye
Mesajlar: 222
Kayıt: 02 Tem 2007 05:13

Re: Bir tablodan digerine kayit aktarmak

Mesaj gönderen mrtblt »

Merhaba

sorgumu su sekilde olusturuyorum

Kod: Tümünü seç

      
q_fat.SQL.Add('insert into inv_lines values ('''','''+dm.q_genel.fieldbyname('id').AsString+''','''+dm.q_invltemp.fieldbyname('code').AsString+''','''+dm.q_invltemp.fieldbyname('adet').AsString+''','''+dm.q_invltemp.fieldbyname('unit_price').ascurrency+''','''+dm.q_invltemp.fieldbyname('line_net').ascurrency+''','''+dm.q_invltemp.fieldbyname('line_vat').ascurrency+''','''+dm.q_invltemp.fieldbyname('line_grand').Ascurrency+''','''+dm.q_invltemp.fieldbyname('crn').AsString+''')');
ve su hata mesajini aliyorum

Kod: Tümünü seç

[DCC Error] faturaunit.pas(145): E2010 Incompatible types: 'string' and 'Double'
yani burada ascurrency yazinca kabul etmiyor, string olarak degistirsem alan tipini bu sefer de kusurlari almiyor.

Nasil halledebiliriz bunu?
Kullanıcı avatarı
aslangeri
Moderator
Mesajlar: 4322
Kayıt: 26 Ara 2003 04:19
Konum: Ankara
İletişim:

Re: Bir tablodan digerine kayit aktarmak

Mesaj gönderen aslangeri »

s.a.
asstring olarak eklemen lazım. budurumda parasal değerlerdeki küsürat için kullanılan "," alanları ayırmk için kullanılan ile çakışıyor.
parametre kullanarak sorununu aşabilirsin.
kolay gelsin.
Duyduğun Şeylerin Söylediklerim Olduğuna Eminim Ama
Anladığın Şeylerin Anlatmak İstediklerim Olduğuna Emin Değilim
mrtblt
Üye
Mesajlar: 222
Kayıt: 02 Tem 2007 05:13

Re: Bir tablodan digerine kayit aktarmak

Mesaj gönderen mrtblt »

hocam su parametre olayini biraz acabilirmisin yada orneklendirebilirmisin. birkac saattir ugrasiyorum ama yapamadim bisey.
Cevapla