Wieso sollte bei <= '100', 150 angezeigt werden?
Sorry, war ein dummer Tippfehler im Posting (200 wäre der korrekte Wert, habe ich im Posting korrigiert).
Aktuell habe ich es so gelöst, dass zuerst ein 'between' versucht wird. Führt dies zu keinem Ergebnis, mache ich eine neue Abfrage mit logischen Operatoren.
So komme ich zwar zu meinen Daten, aber dies müsste doch sicher einfacher gehen.
Delphi-Quellcode:
// Da Between nur numerische Werte enthalten darf und die logischen Operatoren
// bei rein numerischen Werten wiederum keine Datenmenge zurückliefern, wird
// aktuell dieser Workarround benutzt.
// Da Alphanumerische Werte bei einer between Abfrage zu einer Exception führen,
// wird dies in ein "try-except" verpackt
try
quSuchen.SQL.Text := '
Select * from REPARATUR INNER JOIN ' +
'
(MATERIAL) ON ' +
'
REPARATUR.MATERIAL_ID = MATERIAL.MATERIAL_ID AND ' +
'
MATERIAL.MATERIALNR = :MaterialNr AND ' +
'
(REPARATUR.SERIENNUMMER between :SerNr_Start AND :SerNr_Ende)';
quSuchen.ParamByName('
MATERIALNR').AsString := edMaterialNr.Text;
quSuchen.ParamByName('
SerNr_Start').AsInteger := StrToInt(edSerienNr_Start.Text);
quSuchen.ParamByName('
SerNr_Ende').AsInteger := StrToInt(edSerienNr_Ende.Text);
quSuchen.Active := True;
except
end;
if quSuchen.RecordCount = 0
then begin
try
quSuchen.SQL.Text := '
Select * from REPARATUR INNER JOIN ' +
'
(MATERIAL) ON ' +
'
REPARATUR.MATERIAL_ID = MATERIAL.MATERIAL_ID AND ' +
'
MATERIAL.MATERIALNR = :MaterialNr AND ' +
'
(REPARATUR.SERIENNUMMER >= :SerNr_Start AND ' +
'
REPARATUR.SERIENNUMMER <= :SerNr_Ende) AND ' +
'
REPARATUR.DATUM BETWEEN :Datum_Start AND :Datum_Ende';
quSuchen.ParamByName('
MATERIALNR').AsString := edMaterialNr.Text;
quSuchen.ParamByName('
SerNr_Start').AsString := edSerienNr_Start.Text + '
%';
quSuchen.ParamByName('
SerNr_Ende').AsString := edSerienNr_Ende.Text + '
%';
quSuchen.ParamByName('
DATUM_START').AsDate := edDatum_Start.Date;
quSuchen.ParamByName('
DATUM_ENDE').AsDate := edDatum_Ende.Date;
quSuchen.Active := True;
except
end;
end;