@Delphi_Fanatik
Wie kommst du auf die Idee TDate sei ein Integer?
Mein D7 sagt mir immer noch das:
Delphi-Quellcode:
TDateTime = type Double;
...
TDate = type TDateTime;
...und zukünftig gilt nur noch das:
Zitat von
.Net SDK Doku:
The DateTime value type represents dates and times with values ranging from 12:00:00 midnight, January 1, 0001 Anno Domini (Common Era) to 11:59:59 P.M., December 31, 9999 A.D. (C.E.)
Time values are measured in 100-nanosecond units called ticks, and a particular date is the number of ticks since 12:00 midnight, January 1, 1 A.D. (C.E.) in the GregorianCalendar calendar. For example, a ticks value of 31241376000000000L represents the date, Friday, January 01, 0100 12:00:00 midnight. A DateTime value is always expressed in the context of an explicit or default calendar.
Da wird man mit einem Integer (jedenfalls Int32) auch nicht weit kommen...
Das Datumsfelder (wie eigentlich jeder Wert) in einen Parameter gehört wurde wohl nicht nur in diesem Thread oft genug gepredigt.
@Sharky
Delphi-Quellcode:
with Query do
begin
SQL.Text :=
'
SELECT X' + #10 +
'
FROM Y' + #10 +
'
WHERE Z = :i_XYZ';
with Parameters.ParamByName('
i_XYZ')
do
begin
DataType := ftDateTime;
Value := now;
end;
Open;
//...
end;
Dieser Vergleich kann nur funktionieren wenn Z auf die Millisekunde (unter .Net auf 100 Nanosekunden) mit der aktuellen Systemzeit übereinstimmt. Im Normalfall sollte man bei direkten Vergleich den Zeitanteil abschneiden.