Du machst gleich mehrere Fehler:
1.)
SQL-Anweisungen sollten innerhalb eines Datenmoduls gekapselt bleiben um in der Anwendung möglichst wenige Abhängigkeiten zu haben
2.) Wenn man Daten als
CSV rausschreiben möchte, dann sollte man
eine einzige Query schreiben, die alle Daten über
SQL JOINS verknüpft.
Du verwendest 2 Queries; das ist schlecht (langsam).
3.) Um Daten per
CSV zu schreiben, sollte man eine eigene Procedure mit Übergabeparameter erstellen.
z.B.
procedure WriteCsvFile(ds:TDataset; const filename:string; delimiter:char);
Anstatt jeden Datensatz einzeln mit writeln rauszuschreiben ist es bestimmt schneller, alle Daten in einer Stringliste zu sammeln und auf einen Rutsch mit .SaveToFile() zu schreiben.
PS: Bei sehr grossen Datenmengen muss man die Stringliste nach ~ 1000 bis 10000 Datensätzen an die Datei anhängen und dann wieder leeren um eine extreme Speicherbelastung zu vermeiden.