tabloları birleştirip kayıt etmek.

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

tabloları birleştirip kayıt etmek.

Mesaj gönderen erdogan_ozkaya »

Merhaba Arkadaşlar,

"YAKIT_FISLERI_TABLO_TEMP" adında bir tablom var bu excel den veri aktarıp, ARACLAR_TABLO tablom ile birleştirip plakaarla eşleştiriyorum böylece ID bulabiliyorum

birleştirdiğim kayıtları "HESAP_HAREKETLERI" tabloma aktarmak istiyorum nasıl yapabilirim ?


teşekküler.

Kod: Tümünü seç


 SELECT dbo.ARACLAR_TABLO.ID, dbo.ARACLAR_TABLO.ARAC_GRUBU, dbo.ARACLAR_TABLO.MARKA, dbo.ARACLAR_TABLO.MODEL, dbo.ARACLAR_TABLO.YAKIT_TIPI, 
 dbo.YAKIT_FISLERI_TABLO_TEMP.*
 FROM  dbo.YAKIT_FISLERI_TABLO_TEMP LEFT OUTER JOIN
 dbo.ARACLAR_TABLO ON dbo.YAKIT_FISLERI_TABLO_TEMP.PLAKA = dbo.ARACLAR_TABLO.PLAKA_SON

tayipk
Üye
Mesajlar: 284
Kayıt: 27 Kas 2013 11:32

Re: tabloları birleştirip kayıt etmek.

Mesaj gönderen tayipk »

merhaba. şöyle bir fikir vermek isterim illaki düşünmüş olabilirsin fakat ilk aklıma gelen şu oluyor birleştridiğin tablolarını bir datasete çekersin. örneğin adoquery1 sonrada While not adoquery1.eof do diyerek te adoquery1 deki fieldlarda bulanan bilgileri diğer tablona yani adoquery2 ye aktarabilirsin. eğer kod konusunda takılıyorum dersen tekrar yardımcı olmaya çalışırım ilk önce mantık hakkında aklıma geleni söylemek istedim. Kolay gelsin.
Soru Sorarken yazmaya Üşenmeyen Parmaklar Sorunun Çözüldükten Sonra Teşekkür etmeye de Üşenmesin.
erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

Re: tabloları birleştirip kayıt etmek.

Mesaj gönderen erdogan_ozkaya »

hocam cevap için teşekkürler kodu göndermen mümkün mü acaba ? :)
tayipk
Üye
Mesajlar: 284
Kayıt: 27 Kas 2013 11:32

Re: tabloları birleştirip kayıt etmek.

Mesaj gönderen tayipk »

O zaman şöyle diyelim Q1 senin birleştiridiğin bilgileri çekmiş olduğun tablonun dataseti olsun Q2 de aktaracağın tablonun olduğu Datasset olsun aşağıdaki gibi ilerleyebilirsin

Kod: Tümünü seç


while not Q1.Eof do
begin
Q2.fieldbyname('plakano').asstring:=Q1.fieldbyname('plakano').asstring;
.....
....
...
Q2.Post;
Q1.Next;
şeklinde istediğin veriyi istediğin alana aktarabilirsin.
Soru Sorarken yazmaya Üşenmeyen Parmaklar Sorunun Çözüldükten Sonra Teşekkür etmeye de Üşenmesin.
erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

Re: tabloları birleştirip kayıt etmek.

Mesaj gönderen erdogan_ozkaya »

Hocam Aşağıdaki kod ile çözdüm ama bu defa qryYAKIT_FISLERI_DB.Fieldbyname('TEMP_ID').Text boş olan kaydı aktarmasını istemiyorum nasıl yapabilirim ?

teşekkürler

Kod: Tümünü seç

begin
        if (qryYAKIT_FISLERI_DB.RecordCount=0)
       then ShowMessage('               Kayıt Bulunamıyor                  ') else
begin
        qryYAKIT_FISLERI_DB.First;
         while not qryYAKIT_FISLERI_DB.Eof do  begin
        qryYAKIT_FISLERI_DB.Next;
     begin
        qryHESAP_HAREKETLERI_DB.Insert;
        qryHESAP_HAREKETLERI_DB.FieldByName('ARAC_ID').AsString:=qryYAKIT_FISLERI_DB.fieldbyname('ID').Text;

        qryHESAP_HAREKETLERI_DB.FieldByName('PERSONEL_ID').AsString:=qryYAKIT_FISLERI_DB.fieldbyname('SOFOR_ID').Text;

        qryHESAP_HAREKETLERI_DB.FieldByName('FIS_TARIHI').AsString:=qryYAKIT_FISLERI_DB.fieldbyname('FIS_TARIHI').Text;
        qryHESAP_HAREKETLERI_DB.FieldByName('GENEL_BORC_TUTARI').AsString:=qryYAKIT_FISLERI_DB.fieldbyname('GENEL_BORC_TUTARI').Text;
        qryHESAP_HAREKETLERI_DB.FieldByName('AKARYAKIT_ISTASYON').AsString:=qryYAKIT_FISLERI_DB.fieldbyname('AKARYAKIT_ISTASYON').Text;
        qryHESAP_HAREKETLERI_DB.FieldByName('ACIKLAMA').AsString:=qryYAKIT_FISLERI_DB.fieldbyname('ACIKLAMA').Text;
        qryHESAP_HAREKETLERI_DB.FieldByName('LITRE').AsString:=qryYAKIT_FISLERI_DB.fieldbyname('LITRE').Text;
        qryHESAP_HAREKETLERI_DB.FieldByName('YAKIT_TURU').AsString:=qryYAKIT_FISLERI_DB.fieldbyname('YAKIT_TURU').Text;
        qryHESAP_HAREKETLERI_DB.FieldByName('FIS_NO').AsString:=qryYAKIT_FISLERI_DB.fieldbyname('FIS_NO').Text;
        qryHESAP_HAREKETLERI_DB.FieldByName('GUNCEL_KM').AsString:='0';
        qryHESAP_HAREKETLERI_DB.FieldByName('FIS_TIPI').AsString:=qryYAKIT_FISLERI_DB.fieldbyname('FIS_TIPI').Text;


       qryHESAP_HAREKETLERI_DB.FieldByName('DONEM_YIL').AsString:=KULLANICI_KONTROL_PENCERE.QRY_CALISILAN_FIRMALAR_DBCALISILAN_YIL.Text;
       qryHESAP_HAREKETLERI_DB.FieldByName('EKLEYEN').AsString:=KULLANICI_KONTROL_PENCERE.QRY_KULLANICI_DBKULLANICI_ADI.Text;
       qryHESAP_HAREKETLERI_DB.FieldByName('CALISILAN_FIRMA').AsString:=KULLANICI_KONTROL_PENCERE.CALISILAN_FIRMA_KOD.Text;


        qryHESAP_HAREKETLERI_DB.FieldByName('DURUMU').AsString:='Ödendi';
        qryHESAP_HAREKETLERI_DB.post;

          qryYAKIT_FISLERI_DB.Next;
    end;
        qryHESAP_HAREKETLERI_DB.Requery;
  end;
end;
tayipk
Üye
Mesajlar: 284
Kayıt: 27 Kas 2013 11:32

Re: tabloları birleştirip kayıt etmek.

Mesaj gönderen tayipk »

yazmış olduğun koddaki önemli hata

Kod: Tümünü seç

qryHESAP_HAREKETLERI_DB.FieldByName('ARAC_ID').AsString:=qryYAKIT_FISLERI_DB.fieldbyname('ID').Text;
burdaki qryYAKIT_FISLERI_DB.fieldbyname('ID').Text satırını TEXT yaptığın sürece bu işlem sürekli hata üretecektir. çünkü ID dediğin şey muhtemelen Autoincrement bir field ve integer tipindedir. Text demiş olduğunda stringe değer almaya çalışıyorsun bu bir hata. 2. si bu aktarım yaparken sürekli olarak qry.fieldbyname('...').Asstring yada field tipine göre Asfloat yada Asinteger yada Asdatetime şeklinde işlemler yaparsan ilgili field boş olsa bile hata döndürmeyecekteri qryYAKIT_FISLERI_DB.fieldbyname('ID').Text yaptığında ilgili field eğer boş ise otomatik olarak hata döndürecektir. gelelim boş kayıtları aktarmasın durumunu bunu döngü ise şart sorgusu ile çok basit bir şekilde yapabilirsin. örn. hangi alan boş olduğunda aktarmamasını istiyorsan şöyle başlayabilirsin

Kod: Tümünü seç

while not query1.eof do
begin
query2.fieldbyname('ABC').asstring:=qeyr1.fieldbyname('ABC').ASSTRING
if query1.fieldbyname('EFG').ASSTRING='' then
begin
query2.cancel;
query1.next;
end else
if not (query1.fieldbyname('EFG').ASSTRING='') then
begin
aktarım işlemlerine kaldığın fielddan devam edebilirsin
end;
query1.next;
end;
şeklinde bi denermisin
Soru Sorarken yazmaya Üşenmeyen Parmaklar Sorunun Çözüldükten Sonra Teşekkür etmeye de Üşenmesin.
erdogan_ozkaya
Üye
Mesajlar: 839
Kayıt: 03 Eki 2007 02:00

Re: tabloları birleştirip kayıt etmek.

Mesaj gönderen erdogan_ozkaya »

Hocam cevabınız için teşekkür ederim,

ARAC_ID hesap hareketlerindeki text alanı okadar ıd ise araçlar tablosundaki kaydın ıd si aşağıdaki kod ile yapmaya çalıştım ama kimini aktarıyor kimini aktarmıyor eğer ID boş ise kayıt yok anlamına geliyor yani aktarmamalı

Teşekkürler

Kod: Tümünü seç

procedure TYAKIT_FISLERI_TEMP_PENCERE.btn3Click(Sender: TObject);
begin
        if (qryYAKIT_FISLERI_DB.RecordCount=0)
       then ShowMessage('               Kayıt Bulunamıyor                  ') else
begin


while not qryYAKIT_FISLERI_DB.eof do
begin
 qryHESAP_HAREKETLERI_DB.Insert;
        qryHESAP_HAREKETLERI_DB.FieldByName('ARAC_ID').AsString:=qryYAKIT_FISLERI_DB.fieldbyname('ID').Text;

        qryHESAP_HAREKETLERI_DB.FieldByName('PERSONEL_ID').AsString:=qryYAKIT_FISLERI_DB.fieldbyname('SOFOR_ID').Text;

        qryHESAP_HAREKETLERI_DB.FieldByName('SON_GUNCELLEME').AsString:=DateToStr(dtpAKTARIM_TARIHI_DATE.Date);

        qryHESAP_HAREKETLERI_DB.FieldByName('FIS_TARIHI').AsString:=qryYAKIT_FISLERI_DB.fieldbyname('FIS_TARIHI').Text;
        qryHESAP_HAREKETLERI_DB.FieldByName('GENEL_BORC_TUTARI').AsString:=qryYAKIT_FISLERI_DB.fieldbyname('GENEL_BORC_TUTARI').Text;
        qryHESAP_HAREKETLERI_DB.FieldByName('AKARYAKIT_ISTASYON').AsString:=qryYAKIT_FISLERI_DB.fieldbyname('AKARYAKIT_ISTASYON').Text;
        qryHESAP_HAREKETLERI_DB.FieldByName('ACIKLAMA').AsString:=qryYAKIT_FISLERI_DB.fieldbyname('ACIKLAMA').Text;
        qryHESAP_HAREKETLERI_DB.FieldByName('LITRE').AsString:=qryYAKIT_FISLERI_DB.fieldbyname('LITRE').Text;
        qryHESAP_HAREKETLERI_DB.FieldByName('YAKIT_TURU').AsString:=qryYAKIT_FISLERI_DB.fieldbyname('YAKIT_TURU').Text;
        qryHESAP_HAREKETLERI_DB.FieldByName('FIS_NO').AsString:=qryYAKIT_FISLERI_DB.fieldbyname('FIS_NO').Text;
        qryHESAP_HAREKETLERI_DB.FieldByName('GUNCEL_KM').AsString:='0';
        qryHESAP_HAREKETLERI_DB.FieldByName('FIS_TIPI').AsString:=qryYAKIT_FISLERI_DB.fieldbyname('FIS_TIPI').Text;


       qryHESAP_HAREKETLERI_DB.FieldByName('DONEM_YIL').AsString:=KULLANICI_KONTROL_PENCERE.QRY_CALISILAN_FIRMALAR_DBCALISILAN_YIL.Text;
       qryHESAP_HAREKETLERI_DB.FieldByName('EKLEYEN').AsString:=KULLANICI_KONTROL_PENCERE.QRY_KULLANICI_DBKULLANICI_ADI.Text;
       qryHESAP_HAREKETLERI_DB.FieldByName('CALISILAN_FIRMA').AsString:=KULLANICI_KONTROL_PENCERE.CALISILAN_FIRMA_KOD.Text;


        qryHESAP_HAREKETLERI_DB.FieldByName('DURUMU').AsString:='Ödendi';
        qryHESAP_HAREKETLERI_DB.post;

if qryYAKIT_FISLERI_DB.fieldbyname('ID').ASSTRING='' then
begin
qryHESAP_HAREKETLERI_DB.cancel;
qryYAKIT_FISLERI_DB.next;
end else
if not (qryYAKIT_FISLERI_DB.fieldbyname('ID').ASSTRING='') then
begin
  qryHESAP_HAREKETLERI_DB.Insert;
        qryHESAP_HAREKETLERI_DB.FieldByName('ARAC_ID').AsString:=qryYAKIT_FISLERI_DB.fieldbyname('ID').Text;

        qryHESAP_HAREKETLERI_DB.FieldByName('PERSONEL_ID').AsString:=qryYAKIT_FISLERI_DB.fieldbyname('SOFOR_ID').Text;

        qryHESAP_HAREKETLERI_DB.FieldByName('SON_GUNCELLEME').AsString:=DateToStr(dtpAKTARIM_TARIHI_DATE.Date);

        qryHESAP_HAREKETLERI_DB.FieldByName('FIS_TARIHI').AsString:=qryYAKIT_FISLERI_DB.fieldbyname('FIS_TARIHI').Text;
        qryHESAP_HAREKETLERI_DB.FieldByName('GENEL_BORC_TUTARI').AsString:=qryYAKIT_FISLERI_DB.fieldbyname('GENEL_BORC_TUTARI').Text;
        qryHESAP_HAREKETLERI_DB.FieldByName('AKARYAKIT_ISTASYON').AsString:=qryYAKIT_FISLERI_DB.fieldbyname('AKARYAKIT_ISTASYON').Text;
        qryHESAP_HAREKETLERI_DB.FieldByName('ACIKLAMA').AsString:=qryYAKIT_FISLERI_DB.fieldbyname('ACIKLAMA').Text;
        qryHESAP_HAREKETLERI_DB.FieldByName('LITRE').AsString:=qryYAKIT_FISLERI_DB.fieldbyname('LITRE').Text;
        qryHESAP_HAREKETLERI_DB.FieldByName('YAKIT_TURU').AsString:=qryYAKIT_FISLERI_DB.fieldbyname('YAKIT_TURU').Text;
        qryHESAP_HAREKETLERI_DB.FieldByName('FIS_NO').AsString:=qryYAKIT_FISLERI_DB.fieldbyname('FIS_NO').Text;
        qryHESAP_HAREKETLERI_DB.FieldByName('GUNCEL_KM').AsString:='0';
        qryHESAP_HAREKETLERI_DB.FieldByName('FIS_TIPI').AsString:=qryYAKIT_FISLERI_DB.fieldbyname('FIS_TIPI').Text;


       qryHESAP_HAREKETLERI_DB.FieldByName('DONEM_YIL').AsString:=KULLANICI_KONTROL_PENCERE.QRY_CALISILAN_FIRMALAR_DBCALISILAN_YIL.Text;
       qryHESAP_HAREKETLERI_DB.FieldByName('EKLEYEN').AsString:=KULLANICI_KONTROL_PENCERE.QRY_KULLANICI_DBKULLANICI_ADI.Text;
       qryHESAP_HAREKETLERI_DB.FieldByName('CALISILAN_FIRMA').AsString:=KULLANICI_KONTROL_PENCERE.CALISILAN_FIRMA_KOD.Text;


        qryHESAP_HAREKETLERI_DB.FieldByName('DURUMU').AsString:='Ödendi';
        qryHESAP_HAREKETLERI_DB.post;
end;
qryYAKIT_FISLERI_DB.next;
end;


end;
end; 
tayipk
Üye
Mesajlar: 284
Kayıt: 27 Kas 2013 11:32

Re: tabloları birleştirip kayıt etmek.

Mesaj gönderen tayipk »

slm.

Kod: Tümünü seç

if qryYAKIT_FISLERI_DB.fieldbyname('ID').ASSTRING='' then
begin
kontrolünü While do Döngünden hemen sora yap yani

Kod: Tümünü seç

while not qryYAKIT_FISLERI_DB.eof do
begin
if qryYAKIT_FISLERI_DB.fieldbyname('ID').ASSTRING='' then
begin
......
...
...
...
end else
if not (qryYAKIT_FISLERI_DB.fieldbyname('ID').ASSTRING='') then
begin
......
...
...
...
end;
end;
şeklinde denermisin
Soru Sorarken yazmaya Üşenmeyen Parmaklar Sorunun Çözüldükten Sonra Teşekkür etmeye de Üşenmesin.
tayipk
Üye
Mesajlar: 284
Kayıt: 27 Kas 2013 11:32

Re: tabloları birleştirip kayıt etmek.

Mesaj gönderen tayipk »

belki aşağıdaki kodlarım sana mantık hakkında yol gösterir ben her zaman bu yöntemi kullanırım hatasız kesin çözümür.

Kod: Tümünü seç

 while not QStok.Eof do
    begin
      Application.ProcessMessages;
      ADOQuery1.Close;
      ADOQuery1.SQL.Clear;
      ADOQuery1.SQL.Text:='select * from tstokhar where urun_id='+IntToStr(QStokStok_id.AsInteger)+'';
      ADOQuery1.Open;
      if ADOQuery1.RecordCount=0 then  // ürün kartımızın herhangi bir hareketi yok
      begin
       QListe.Open;
       QListe.Insert;
       QListeA.AsString:=QStokStok_Adi.AsString;
       QListeB.AsString:=QStokStok_Grubu.AsString;
       QListeJ.AsFloat:=QStokSatis_fiyati.AsFloat;
       QListeD.AsString:=QStokStok_id.AsString;
       QListe.Post;
       QStok.Next;
       Progres.Position:=Progres.Position+1;
       Progres.Update;
      end else
      if ADOQuery1.RecordCount>0 then // ürün kartımızın hareketi var
      begin
      QStok.Next;
      Progres.Position:=Progres.Position+1;
      Progres.Update;
      end;
     end;
Soru Sorarken yazmaya Üşenmeyen Parmaklar Sorunun Çözüldükten Sonra Teşekkür etmeye de Üşenmesin.
Cevapla