Man kann das auch anderst lösen:
Delphi-Quellcode:
jahr := 2012;
monat := 12;
ADOQuery1.SQL.Text := 'SELECT * FROM tStunden'#13#10+
'WHERE (MitarbeiterID = :MitarbeiterID)'#13#10+
'AND [DATE] >= :datevon AND [DATE] < :datebis';
ADOQuery1.Parameters.ParamValues['MitarbeiterID'] := '004';
ADOQuery1.Parameters.ParamValues['datevon'] := EncodeDate(jahr,monat,1);
Inc(monat);
if monat > 12 then begin monat := 1; Inc(jahr); end;
ADOQuery1.Parameters.ParamValues['datebis'] := EncodeDate(jahr {=2013},monat {=1},1);
ADOQuery1.Open;
Diese Vorgehensweise hat den Vorteil, dass man auch andere Zeitintervalle als nur einen Monat angeben kann.
Man beachte, dass der 1.1.2013 nicht in den Daten enthalten ist; der Zeitpunktt 31.12.2012 23:59:59 aber schon.
Dies funktioniert ohne Änderungen für MSAccess als auch für MS
SQL Server 7/2000/2005/2008/2012.