.txt dosyası oluştururken kod hatası.

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Gk_imptob
Üye
Mesajlar: 84
Kayıt: 01 Kas 2005 12:34

.txt dosyası oluştururken kod hatası.

Mesaj gönderen Gk_imptob »

Sevgili arkadaş benim Tablo1 ve Tablo2 adında FB biriine bağlı master detail tablolarım var.Ben bunlar için excele dosyasına gönderen sorgu yazdım, fakat excelde çok yavaş rapor oluşturduğu için tavsiyeler üzerine query'lerimi .txt dosyasına oluşturmaya karar verdim.Yazdığım kod aşşağıdaki gibi.ibquery3 sorgusu düzgün çalışıyor fakat alt tablonun sorgusu ibquery4 düzgün çalışmıyor.Döngüde problem var bulamadım.

Kod: Tümünü seç

procedure TTechnical_PO_Tracing_InvoiceNo.Button2Click(Sender: TObject);
var
f:TextFile;
i,i1:integer;
satir,satir2:string;
begin
i:=0;
i1:=0;
satir:='';
satir2:='';
AssignFile(f, 'd:\Deneme1111.txt');
Rewrite(F);
iBQuery3.Close;
IBQuery3.SQL.Clear;
IBQuery3.SQL.Add('select T1.PONUMBER, T1.SUPPLIER, T1.PO_DATE, T1.TOTAL, T1.CURRENCY from Tablo1 T1 inner join Tablo2 T2 on T1.po_pk=T2.PO2_FK where INVOICE_NO is not null and T2.DELIVERY_DATE between '''+cxDateEdit1.Text+'''  and '''+cxDateEdit2.Text+'''');
IBQuery3.Open;
IBQuery3.First;
While NOT IBQuery3.Eof do
   begin
   Satir := '';
   For i := 0 to IBQuery3.Fields.Count -1 do
     begin
     Satir := Satir + IBQuery3.Fields[i].Text + '!';
     end;
         begin 
         IBQuery4.Close;
         IBQuery4.SQL.Clear;
         IBQuery4.SQL.Add('select COSTCENTER,ACCOUNTCODE,DESCRIPTION from TECHNICAL_PO_TBL_2 where INVOICE_NO is not null and Delivery_Date    between '''+cxDateEdit1.Text+'''  and '''+cxDateEdit2.Text+''' ');
         IBQuery4.open;
         IBQuery4.First;
         While NOT IBQuery4.Eof do
         begin
         Satir2 := '';
         For i1 := 0 to IBQuery4.Fields.Count -1 do
         begin
         Satir2 := Satir2 + IBQuery4.Fields[i1].Text + '!';
         end;
          IBQuery4.Next; //Burdaki next düzgün dönmüyor sanırım ve bunu nereye koyacağımı bilemedim.
        end

         ibquery3.next;//Bu next düzgün dönüyor
         end;
WriteLn(f, satir,Satir2);
end;
CloseFile(f);
end;
Yardım ederseniz çok sevinirim.Teşekkürler.
En son Gk_imptob tarafından 31 Mar 2010 02:06 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Kullanıcı avatarı
doctorfunks
Üye
Mesajlar: 105
Kayıt: 26 Oca 2005 10:37
Konum: İstanbul

Re: .txt dosyası oluştururken kod hatası.

Mesaj gönderen doctorfunks »

gelen hatayı yazabilirseniz daha iyi yardımcı olabiliriz aslında...
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Re: .txt dosyası oluştururken kod hatası.

Mesaj gönderen conari »

Kodları Code tagı arasına alalım da güzelliğimiz bozulmasın.

bu 2 query aynı sayıda mı kayıt döndürüyor?
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
Kullanıcı avatarı
Lost Soul
Üye
Mesajlar: 1064
Kayıt: 01 Nis 2007 02:55
Konum: mekan ANKARA toprak ELAZIĞ
İletişim:

Re: .txt dosyası oluştururken kod hatası.

Mesaj gönderen Lost Soul »

önce şu kodunuzu derli toplu yazdıralım

Kod: Tümünü seç

procedure TTechnical_PO_Tracing_InvoiceNo.Button2Click(Sender: TObject);
var
	f:TextFile;
	i,i1:integer;
	satir,satir2:string;
begin
	i:=0;
	i1:=0;
	satir:='';
	satir2:='';
	AssignFile(f, 'd:\Deneme1111.txt');
	Rewrite(F);
	iBQuery3.Close;
	IBQuery3.SQL.Clear;
	IBQuery3.SQL.Add('select T1.PONUMBER, T1.SUPPLIER, T1.PO_DATE, T1.TOTAL, T1.CURRENCY from Tablo1 T1 inner join Tablo2 T2 on T1.po_pk=T2.PO2_FK where INVOICE_NO is not null and T2.DELIVERY_DATE between '''+cxDateEdit1.Text+''' and '''+cxDateEdit2.Text+'''');
	IBQuery3.Open;
	IBQuery3.First;
	While NOT IBQuery3.Eof do
	begin
		Satir := '';
		For i := 0 to IBQuery3.Fields.Count -1 do
		begin
			Satir := Satir + IBQuery3.Fields[i].Text + '!';
		end;
		begin
			IBQuery4.Close;
			IBQuery4.SQL.Clear;
			IBQuery4.SQL.Add('select COSTCENTER,ACCOUNTCODE,DESCRIPTION from TECHNICAL_PO_TBL_2 where INVOICE_NO is not null and Delivery_Date between '''+cxDateEdit1.Text+''' and '''+cxDateEdit2.Text+''' ');
			IBQuery4.open;
			IBQuery4.First;
			While NOT IBQuery4.Eof do
			begin
				Satir2 := '';
				For i1 := 0 to IBQuery4.Fields.Count -1 do
				begin
					Satir2 := Satir2 + IBQuery4.Fields[i1].Text + '!';
				end;
				IBQuery4.Next; //Burdaki next düzgün dönmüyor sanırım ve bunu nereye koyacağımı bilemedim.
			end
			ibquery3.next;//Bu next düzgün dönüyor
		end;
		WriteLn(f, satir,Satir2);
	end;
	CloseFile(f);
end;
şimdi de yanlış olduğunu düşündüğüm yerleri düzelteyim.

Kod: Tümünü seç

procedure TTechnical_PO_Tracing_InvoiceNo.Button2Click(Sender: TObject);
var
	f:TextFile;
	i,i1:integer;
	satir,satir2:string;
begin
	i:=0;
	i1:=0;
	satir:='';
	satir2:='';
	AssignFile(f, 'd:\Deneme1111.txt');
	Rewrite(F);
	iBQuery3.Close;
	IBQuery3.SQL.Clear;
	IBQuery3.SQL.Add('select T1.PONUMBER, T1.SUPPLIER, T1.PO_DATE, T1.TOTAL, T1.CURRENCY from Tablo1 T1 inner join Tablo2 T2 on T1.po_pk=T2.PO2_FK where INVOICE_NO is not null and T2.DELIVERY_DATE between '''+cxDateEdit1.Text+''' and '''+cxDateEdit2.Text+'''');
	IBQuery3.Open;
	IBQuery3.First;
	While NOT IBQuery3.Eof do
	begin
		Satir := '';
		For i := 0 to IBQuery3.Fields.Count -1 do
		begin
			Satir := Satir + IBQuery3.Fields[i].Text + '!';
		end;
		begin
			IBQuery4.Close;
			IBQuery4.SQL.Clear;
			IBQuery4.SQL.Add('select COSTCENTER,ACCOUNTCODE,DESCRIPTION from TECHNICAL_PO_TBL_2 where INVOICE_NO is not null and Delivery_Date between '''+cxDateEdit1.Text+''' and '''+cxDateEdit2.Text+''' ');
			IBQuery4.open;
			IBQuery4.First;
			While NOT IBQuery4.Eof do
			begin
				Satir2 := '';
				For i1 := 0 to IBQuery4.Fields.Count -1 do
				begin
					Satir2 := Satir2 + IBQuery4.Fields[i1].Text + '!';
				end;
				WriteLn(f, satir,Satir2);//************ bu satırı buraya taşıdım  
				IBQuery4.Next; //Burdaki next düzgün dönmüyor sanırım ve bunu nereye koyacağımı bilemedim.
			end;//*****burada ";" yoktu ekledim
			ibquery3.next;//Bu next düzgün dönüyor
		end;
		//*****************satır önceden buradaydı.
	end;
	CloseFile(f);
end;
Gk_imptob
Üye
Mesajlar: 84
Kayıt: 01 Kas 2005 12:34

Re: .txt dosyası oluştururken kod hatası.

Mesaj gönderen Gk_imptob »

Öncelikle cevap veren tüm arkadaşlara teşekkür ederim.Soruma cevap geleceği konusunda pek fazla umutlu değildim.Lost Soul arkadaşımızın düzeltme yaptığı kodlarımda sonuca biraz yaklaştık fakat tam istediğm sonucu alamadım.Fazla kayıt ekledi Çıkan sonuç şöyle deneme1111.txt'de ekledim. Olması istediğim şekli ise ben manuel düzeltme yaptım kendim.deneme2222.txt'de

Teşekkürler.
En son Gk_imptob tarafından 31 Mar 2010 02:09 tarihinde düzenlendi, toplamda 2 kere düzenlendi.
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Re: .txt dosyası oluştururken kod hatası.

Mesaj gönderen conari »

böyle bir yola gitmekten ise iki cümleyi joinleyip tek SQL ile yazdır.
INVOICE_NO sanırım primary bununla joinle iki tabloyu.
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
Gk_imptob
Üye
Mesajlar: 84
Kayıt: 01 Kas 2005 12:34

Re: .txt dosyası oluştururken kod hatası.

Mesaj gönderen Gk_imptob »

conari, benim ibquery3 sorgum zaten inner join'li.Kasdettiğin bumudur.Sorguda yapmak istediğim Tablo2'deki receiptdate göre sorgu çalıştırıp hem tablo1'deki hemde tablo2'deki bilgileri dökmek.Farklı bişeyden bahsediyorsan örnek verebilirmisin.

Teşekkürler.
Gk_imptob
Üye
Mesajlar: 84
Kayıt: 01 Kas 2005 12:34

Re: .txt dosyası oluştururken kod hatası.

Mesaj gönderen Gk_imptob »

OLDU, OLDUUU :bravo:
conari tavsiyesine uyup joinler hakkında biraz araştırma yaptım.Ve sonuca ulaştım.
conari yazdı:böyle bir yola gitmekten ise iki cümleyi joinleyip tek SQL ile yazdır.
Çalışan kod aşşağıdaki gibidir.Yardımı geçen tüm arkadaşlara teşekkür ederim.Hakkınızı helal edin.

Kod: Tümünü seç

procedure TTechnical_PO_Tracing_InvoiceNo.Button5Click(Sender: TObject);
var
f:TextFile;
i:integer;
satir,line:string;
begin
i:=0;
satir:='';
AssignFile(f, 'd:\Deneme1111.txt');
Rewrite(F);
iBQuery3.Close;
IBQuery3.SQL.Clear;
IBQuery3.SQL.Add('select T1.PONUMBER, T1.SUPPLIER, T1.PO_DATE, T1.TOTAL, T1.CURRENCY, T2.costcenter, T2.ACCOUNTCODE, T2.DESCRIPTION from technical_po_tbl_1 T1 inner join TECHNICAL_PO_TBL_2 T2 on T1.po_pk=T2.PO2_FK where INVOICE_NO is not null and T2.DELIVERY_DATE between '''+cxDateEdit1.Text+''' and '''+cxDateEdit2.Text+'''');
IBQuery3.Open;
IBQuery3.First;
While NOT IBQuery3.Eof do
   begin
   Satir := '';
   For i := 0 to IBQuery3.Fields.Count -1 do
     begin
     Satir := Satir + IBQuery3.Fields[i].Text + '!';
     end;

ibquery3.Next;
WriteLn(f, satir);
end;
CloseFile(f);
end;
Cevapla