Hallo
SQL-Experten,
benötige mal wieder Tips zu folgender Abfrage:
Delphi-Quellcode:
// ist vonDatumbisZeit gefüllt, und bisDatum unterschiedlich zu von Datum
// und bisDatbisZeit gefüllt, dann
//*********** Zeitraum über mehrere Tage hinweg *******************************
if (length(trim(edvonDatvonZeit.Text)) = 8)
and
(length(trim(edVonDatbisZeit.Text)) <> 8)
then begin
if (length(trim(edbisDatbisZeit.Text)) = 8)
and
(length(trim(edBisDatvonZeit.Text)) <> 8)
then begin
datSQL := '
union select * from BESTELL where (DATUM = '+
Quotedstr(DateToStr(vonDatum.Date)) + '
and ZEIT >= '+
Quotedstr(edVonDatvonZeit.Text)+'
) union '+
'
Select * from BESTELL where (DATUM between '+
Quotedstr(DateToStr(vonDATUM.Date + 1))+ '
and ' +
QuotedStr(DateToStr(bisDatum.Date -1))+'
)'+
'
union Select * from BESTELL where (DATUM = '+
QuotedStr(DateToStr(bisDatum.Date))+'
and ZEIT <= '+
QuotedStr(edBisDatBisZEIT.text)+'
) order by 4, 5';
end;
end;
// Zeige den SQL-BEFEHL
with dMODUL
do begin
zQueryKanban.SQL.Clear;
zQueryKANBAN.SQL.Text := dSQL+datSQL;
reditSQL.Clear;
rEditSQL.Lines.Add(zQueryKANBAN.SQL.Text);
showmessage(zqueryKANBAN.SQL.Text);
zQueryKANBAN.Open;
end;
Folgender
SQL-Befehl bekomme ich angezeigt:
SELECT * from BESTELL where STATUS = 'E' // dieser Befehl steht in dSQL
union
select * from BESTELL where (DATUM = '24.01.2007' and ZEIT >= '02:00:00')
union
Select * from BESTELL where (DATUM between '25.01.2007' and '24.01.2007') union
Select * from BESTELL where (DATUM = '25.01.2007' and ZEIT <= '14:00:00') order by 4, 5
Als Ergebnis bekomme ich tatsächlich ab 24.01.07 02:00:00 Uhr alle Datensätze, allerdings werden mir am 25.01.07 auch Datensätze angezeigt, die nach 14:00 Uhr liegen.
Der zweite Fehler ist folgender ,ich bekomme nicht nur STATUS ='E' angezeigt, sondern auch Status ='D'
Was ist hier schief gelaufen. Ich teste und lese schon fast 8 Std und komme zu keinem richtigen Ergebnis.
Wenn ich allerdings den
SQL-Befehl vor dem ersten union weglasse,also Select * from Bestell where STATUS ='E', so erhalte ich die richtigen Datensätze für den abgefragten Zeitraum.
Ich bedanke mich jetzt schon, für alle Tips
Gruß Nachtstreuner