Grundsätzlich baue ich zuerst das
SQL vollständig zusammen und
dann werden die Parameter mit Werten befüllt. Ich käme nie auf die Idee ein
SQL teilweise zu erstellen, dann Parameter zu befüllen und dann das
SQL zu erweitern ...
Daher hab' ich das von Dir beschriebene Problem wohl auch noch nie gehabt.
Delphi-Quellcode:
try
CloseQueryAndClearSQLTextAndParameters(q);
t := ' SELECT *' +
' FROM Termine' +
' WHERE ' + sLineBreak +
' ( Termine.EinblendZeit <= :Jetzt1 ) ' + sLineBreak +
' AND ' + sLineBreak +
' ( Termine.AusblendZeit > :Jetzt2 ) ';
q.SQL.Add(t);
q.SQL.Add(' ORDER BY Termine.Von;');
q.Parameters.ParamByName('Jetzt1').DataType := ftDateTime;
q.Parameters.ParamByName('Jetzt1').Value := _Jetzt;
q.Parameters.ParamByName('Jetzt2').DataType := ftDateTime;
q.Parameters.ParamByName('Jetzt2').Value := _Jetzt;
OpenQueryAndLogIfFailed(q, P);
except
//...
end;
Wobei nicht einfach so?
Delphi-Quellcode:
q.SQL.Add(' SELECT *');
q.SQL.Add(' FROM Termine');
q.SQL.Add(' WHERE ');
q.SQL.Add(' ( Termine.EinblendZeit <= :Jetzt1 ) ');
q.SQL.Add(' AND ');
q.SQL.Add(' ( Termine.AusblendZeit > :Jetzt2 ) ');
q.SQL.Add(' ORDER BY Termine.Von;');
q.Parameters.ParamByName('Jetzt1').DataType := ftDateTime;
q.Parameters.ParamByName('Jetzt1').Value := _Jetzt;
q.Parameters.ParamByName('Jetzt2').DataType := ftDateTime;
q.Parameters.ParamByName('Jetzt2').Value := _Jetzt;
Dürfte jetzt auch nicht unbedingt schlechter wartbar sein oder unübersichtlicher.
Gut, wenn es eine Funktion oder Prozedur ist und T von außen kommt, dann ist
Delphi-Quellcode:
q.SQL.Add(t);
q.SQL.Add(' ORDER BY Termine.Von;');
schon ok.
Aber nichtsdestotrotz: Parameter erst befüllen, wenn das
SQL fertig ist, dann gibt es keinen Grund für irgendeine Routine das
SQL erneut zu parsen und dabei ggfls. eine andere Entscheidung bezüglich der Parametertypen treffen zu sollen können müssen.