Einzelnen Beitrag anzeigen

Delphi.Narium

Registriert seit: 27. Nov 2017
2.529 Beiträge
 
Delphi 7 Professional
 
#2

AW: TAdoQuery Parameters.DataType ändert sich nach SQL.Add

  Alt 23. Jan 2025, 17:45
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.
  Mit Zitat antworten Zitat