Einzelnen Beitrag anzeigen

Robert_G
(Gast)

n/a Beiträge
 
#28

Re: SQL Befehl zum Ausgeben von daten in einen bestimmten Be

  Alt 2. Jul 2004, 10:14
Zitat von Sharky:
Code:
procedure TForm1.Button1Click(Sender: TObject);
begin
  with Query1 do
  begin
    Close;
    SQL.Text := 'SELECT *' + #10 
      + 'FROM Booking' + #10 
      + 'WHERE CAST(CONCAT(jahr,"-",monat,"-",tag) AS DATE) BETWEEN :start AND :ende' +#10 
      + 'ORDER BY name, uhrzeit';
    ParamCheck := True;
    Params.ParamByName('start').AsString := FormatDateTime ('yyyy-m-d',[color=red]DateTimePicker1.Date[/color]);
    Params.ParamByName('ende').AsString := FormatDateTime ('yyyy-m-d',[color=red]DateTimePicker2.Date[/color]);
    Open;
  end;
end;

Was machst du denn da?
  • Den #34 wird mySQL (wie die meisten DBs) als Start/Ende eines Identifiers ansehen, NICHT als String. (Das könnte das "Merkmal" sein )
  • Warum erst ein Typcast auf Date, wenn du ihm die Werte als String gibst

So dürfte ein Schuh draus werden:
Delphi-Quellcode:
with Query do
begin
  SQL.Text :=
    'SELECT *' + #10 +
    'FROM Booking' + #10 +
    'WHERE CAST(CONCAT(jahr' + #10 +
    ' ,''-''' + #10 +
    ' ,monat' + #10 +
    ' ,''-''' + #10 +
    ' ,tag) As Date) BETWEEN :i_Start AND :i_Ende' + #10 +
    'ORDER BY Name' + #10 +
    ' ,Uhrzeit';
  // Parse Statement um Variablen zu erkennen
  ParamCheck := True;
  // Parameterzuweisung
  with Params do
  begin
  // Die Zuweisung des DataType soll verhindern, dass die MidWare irgendwelchen Käse fabriziert
    ParamByName('i_Start').DataType := ftDate;
    ParamByName('i_Start').Value := DateTimePicker1.Date;
    ParamByName('i_Ende').DataType := ftDate;
    ParamByName('i_Ende').Value := DateTimePicker2.Date;
  end;
  // Ausführen
  Open;
end;
  Mit Zitat antworten Zitat