Abfrageergebnis in mehrere .txt Dateien speichern

Hallo,

ich frage eine Datenbank ab und speichere das Ergebnis als Textdatei.
Die Abfrage ermittelt alle Auftragsnummern eines bestimmten Tages und die dazugehörigen Artikel.

Ich würde jetzt gerne das Ergebnis nach Auftragsnummern sortiert auf mehrere Dateien aufteilen und für jede Auftragsnummer eine Textdatei mit den Artikeln abspeichern, komme hier aber nicht weiter.

program ausgabe;

var
 Bestellt,ARTNR,ARTBEZ,PosNr : string;
 sl: TStringList;
 i: Integer;
begin

 oQuery.close; 
 oQuery.SQL.Clear;
 oQuery.SQL.Text := 'SELECT kopf.AUFNR,' + 
 position\_TABLE.Bestellt,position\_TABLE.ARTNR, PosNr, +
 position\_TABLE.ARTBEZ FROM kopf kopf INNER JOIN "position" +
 position\_TABLE ON (Kopf.AUFNR = kopf.AUFNR) AND +
 (position\_TABLE.kopfguid = kopf.kopfguid) WHERE + 
 (kopf.LIEFERDATUM = ''2009-12-05'')';

 oQuery.Open;
 sl:=TStringList.Create; //Objekt erzeugen
 PosNr := oQuery.FieldByName('PosNr').asString + ','; 
 ARTNR:= oQuery.FieldByName('ARTBEZ').asString + ',';
 Bestellt := oQuery.FieldByName('Bestellt').asString + ','; 
 ARTBEZ :=oQuery.FieldByName('ARTNR').asString + ',';

 while not oQuery.Eof do 

 begin
 sl.add(oQuery.FieldByName('AUFNR').asString + ',' + PosNr + ARTNR + ARTBEZ + Bestellt);

 sl.SaveToFile('c:\Listen\'+ oQuery.FieldByName('AUFNR').asString + '.txt'); 
 oQuery.Next;

 end; 

end.

So wird zwar für jede Auftragsnummer eine Textdatei erstellt, aber die Artikel der ersten wiederholen sich in der zweiten Textdatei usw.

Kann mir hier jemand einen Tip geben, an welcher Stelle im Skript die Speicherung erfolgen muss.

Gruß Wolfgang

Hallo,

die Belegung der Variablen, die Du abspeichern willst, muss in die Schleife, sonst werden die Werte ja beim wiederholten Duchlaufen der Schleife nie geändert.

Das mit der Stringlist habe ich nicht so ganz verstanden. So wie ich das sehe, ist das ein Wrapper dafür, eine Textzeile aufzunehmen und die in eine Datei zu speichern. Wenn dem so ist, musst du entweder bei jedem Schleifendurchlauf den alten Inhalt vorher wieder löschen (.Clear) oder du verwendest statt .Add eine Zuweisung and .Text:

 while not oQuery.Eof do
 begin
 sl.Text := oQuery.FieldByName('AUFNR').asString + ',' 
 + oQuery.FieldByName('PosNr').asString + ','
 + oQuery.FieldByName('ARTBEZ').asString + ','
 + oQuery.FieldByName('ARTNR').asString + ','
 + oQuery.FieldByName('Bestellt').asString;
 sl.SaveToFile('c:\Listen\'+oQuery.FieldByName('AUFNR').asString+'.txt');
 oQuery.Next;
 end;

VG
Jochen