Man muss bei dieser Filterung auf einen Datumbereich etwas acht geben.
Manche Datenbanken kennen nur ein DateTime-Feld; also Datum und Uhrzeit zusammen.
Wenn die Abfrage alle Datensätze zwischen dem 1.1.2010 und dem 10.1.2010 liefern soll,
dann würde aber ein Datensatz mit dem Wert "10.1.2010 08:30:00" unter den Tisch fallen.
Daher muss die Abfrage und die Procedure leicht verändert werden.
Das Endedatum wird nicht mit <= sondern nur noch mit < verglichen.
Im Gegenzug wird der Parameter für das Endedatum um einen Tag in die Zukunft versetzt.
Delphi-Quellcode:
function NurDatumsAnteil(dt:TDateTime):TDate;
begin
result := Int(dt);
end;
procedure THTMLExportForm.OpenTableDateRange(DateBegin,DateEnd : TDate; const Tablename : String);
begin
QryHTML.SQL.Text := 'SELECT * FROM '+Tablename+' WHERE DATUM >= :ANFANG and DATUM < :ENDE';
QryHTML.ParamByName('ANFANG').AsDate := NurDatumsAnteil(DateBegin);
QryHTML.ParamByName('ENDE').AsDate := NurDatumsAnteil(DateEnd) + 1.0;
QryHTML.Open;
Ich habe zusätzlich die Funktion
NurDatumsAnteil() eingesetzt.
Manche werden sich vielleicht fragen: warum schreibt man dann nicht gleich
Int(Date1) und
Int(Date2)?
Durch die Verwendung dieser scheinbar überflüssigen Funktion habe ich meine Absicht klargemacht,
was der Code hier tun soll.
Man braucht so keine Kommentare um zu erklären was passiert.
Ich habe auch den Namen der Prozedur und dessen Parameternamen geändert, damit die Verwendung der Prozedur noch klarer wird.