Einzelnen Beitrag anzeigen

Benutzerbild von vsti
vsti

Registriert seit: 20. Sep 2004
Ort: Syke
70 Beiträge
 
Delphi 2005 Architect
 
#1

SQL Abfrage - sehr langer IN-Wert

  Alt 16. Jan 2008, 09:57
Datenbank: Firebird • Version: 1.5 • Zugriff über: dbExpress
Moin moin,

folgende Ausgangssituation:
Es gibt zwei Datenbanken. In der einen liegen die zentralen Kundendaten und in der anderen werden für jede Filiale lokal die Statisikdaten festgehalten.
Wenn ich nun für die Statistik die Kunden nach Kundennummer eingrenzen möche, muss ich das so oder so ähnlich machen:

Delphi-Quellcode:
QueryZentral.sql.text:='select id from kunden where kundennummer between ''001'' and ''101''';
QueryZentral.open;
ids:='';
while not QueryZentral.eof do begin
  ids:=ids+QueryZentral.fieldbyname('id').asstring+',';
  QueryZentral.next;
end;
delete(ids,length(ids),1);

QueryLokal.sql.text:='select sum(umsatz) from stat where kunden_id in ('+ids+')';
QueryLokal.open;
Ja, stimmt, das System ist nicht grade optimal aufgebaut, aber so ist leider mein Ausgangspunkt

Jetzt kann man sich denken wo das Problem liegt... das SQL-Statement kann bei vielen Kunden sehr lang werden.

Heterogene Datenbankverbindungen werden von Firebird/Interbase ja leider nicht unterstützt.

Kann man das Problem anders angehen?

Habs auch mal mit Parametern versucht, à la:

Delphi-Quellcode:
QueryLokal.sql.text:='select sum(umsatz) from stat where kunden_id in (:IDS)';
QueryLokal.parambyname('IDS').asstring:=ids;
QueryLokal.open;
was natürlich nicht geht.

Bin dankbar über Anregungen.
Thorsten
  Mit Zitat antworten Zitat