moin,
Wird die Abfrage öfter mit diesen zusätzlichen Werten aufgerufen?
Eine kurze Suche zu [
dp:616481b3d1=
SQL AND Parameter]Parametern[/
dp:616481b3d1] dürfte dich da schon ein ganzes Stück vorwärts bringen.
Genrell gilt das man Datumswerte niemlas in einen
SQL String reinfriemelt, das geht einfach zu gerne nach hinten los.
Wenn du immer mit den 2 Werten abfragst, dann so:
Delphi-Quellcode:
with DeineQuery
do
begin
SQL.Text :=
'
SELECT seriennr.ablaufdatum' + #10 +
'
,beleg_position.bf_pov_feld_5' + #10 +
'
,artikel.artikelnr' + #10 +
'
,artikel.bezeichnung1' + #10 +
'
,seriennr.nr' + #10 +
'
,kunde.kl_nr' + #10 +
'
,kunde.bezeichnung' + #10 +
'
,beleg_position.belegnr' + #10 +
'
,beleg_position.belegart' + #10 +
'
FROM seriennr' + #10 +
'
,artikel' + #10 +
'
,kunde' + #10 +
'
,beleg_position' + #10 +
'
,artikel_kunde' + #10 +
'
WHERE (seriennr.artikelnr = artikel.artikelnr) and' + #10 +
'
(artikel.artikelnr = artikel_kunde.artikelnr) and' + #10 +
'
(artikel_kunde.kl_nr = kunde.kl_nr) and' + #10 +
'
(artikel.artikelnr = beleg_position.artikelnr) and' + #10 +
'
((seriennr.ablaufdatum between :iStartDT and :iEndDT) or' + #10 +
'
(beleg_position.bf_pov_feld_5 between :iStartDT and :iEndDT))';
// Parse Statement um Variablen zu erkennen
Prepared := True;
// Parameterzuweisung
with Parameters
do
begin
ParamByName('
iStartDT').DataType := ftDate;
ParamByName('
iStartDT').Value := DeinStartDatum;
ParamByName('
iEndDT').DataType := ftDate;
ParamByName('
iEndDT').Value := DeinEndDatum;
end;
// Ausführen
Open();
end;
So sparst du deiner armen
DB eine Menge Aufwand beim Parsing und mit etwas Glück hat sie die Ergebnisse (oder wenigsten den Queryplan
) bei 2. Mal noch im Cache.
Zitat von
der-C:
vieleicht hilft es wenn du erstmal ein View erzeugst und dann darauf die
SQL abfrage loslässt
da muss glaube ich nicht ständig die tabelle zusammengesetzt werden
Vor allem wäre dann der Code nicht mehr so hässlich. (siehe oben
)