Also ersteinmal...
Zitat von
tylix:
Ist doch echt zum
... sowas gehört hier nun wirklich nicht hin
Du hattest Delphi code gepostet, nicht
SQL. Außerdem fehlt der End tag. Kannst du bitte vor deinen code ein [ delphi ] und danach [ /dephi ] tippen (ohne Leerzeichen)?
Wenn du deinem Statement veränderliche Werte übergeben willst, dann gehören die in einen Parameter.
Bei Datumsfeldern ist das
absolute Pflicht!!!
Ich weiß nicht, wie oft ich das noch predigen muss...
Es ist doch total blauäugig anzunehmen, dass
DB und Windows das gleiche Format zur implizierten Umwandlung von Text zu Datum (und andersherum) verwenden!
Packe das Ganze in eine
SQL Variable (Parameter), der du den Typ Date gibst. Erst dann hat die
DB keine Möglichkeit das Datum falsch zu interpretieren.
Standardfehler ist z. Bsp. die Vertauschung von Monat und Tag.
Als Eingabefeld für das Datum bietet sich ein DateTimePicker an.
Die Abfrage würde dann etwa so aussehen:
Delphi-Quellcode:
With DM.Qry_Akti2_Selektieren
Do
Begin
SQL.Text :=
'
SELECT Person.ID' + #10 +
'
FROM DBAdmin.Person Person, DBAdmin.Bogen Bogen' + #10 +
'
WHERE (Person.ID = Bogen.PER_ID) And Bogen.status = :i_BogenStatus And' + #10 +
'
Person.Sperre Not In (''
01''
, ''
02''
, ''
03''
, ''
04''
, ''
05''
, ''
06''
) And' + #10 +
'
Person.ID Not In' + #10 +
'
SELECT ID' + #10 +
'
FROM DBAdmin.Person s_Pers, DBAdmin.Merkmale Merkm' + #10 +
'
WHERE s_Pers.ID = Merkm.Mer_Pad_ID And Merkm.mer_merkmal = :i_MerkMal And' + #10 +
'
Merkm.Mer_Dat = :i_MerkDat)';
// Parse Statement um Variablen zu erkennen
Prepared := True;
// Parameterzuweisung
With Parameters
Do
Begin
ParamByName('
i_BogenStatus').Value := 1;
ParamByName('
i_MerkMal').Value := '
002';
ParamByName('
i_MerkDat').DataType := ftDate;
ParamByName('
i_MerkDat').Value := IgendeinDateTimePicker.Date;
End;
End;
// Ausführen
Open;