"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 ?
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.
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
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;
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
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.
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ı
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;
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.
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.