Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Invalid use of keyword. Token ..... (https://www.delphipraxis.net/99215-invalid-use-keyword-token.html)

Gelson62 8. Sep 2007 17:21


Invalid use of keyword. Token .....
 
Hallo zusammen

Habe folgenden Code in meinem Programm (Delphi 7):

Delphi-Quellcode:
procedure TForm1.Button3Click(Sender: TObject);
begin

DBGrid1.DataSource := DataSource4;
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add ('Select * from Kunde.DB');
Query1.SQL.Add('where Request_Formular='+DateToStr(DateTimePicker3.Date));
Query1.RequestLive := true;
Query1.Open;

end;
Wenn ich das Programm laufen lasse und auf den Button klicke erscheint die Fehelermeldung:

Invalide use of keyword. Token = Request_Formular=23.08

Hier noch die Erklärung, was alles vorher abläuft, bevor das Programm zur Ausführung kommt:

Bevor man auf diesen Button klickt muss man ein Datum aus einer DateTimePicker Komponente auswählen. Danach klickt man auf den "Suchen"-Button und nun soll die obige SQL-Abfrage im Datenbank-Feld "Request_Formular" das ausgewählte Datum suchen und mir alle Datensätze anzeigen, welche das gesuchte Datum enthalten.

Leider geht's nit. Was ist falsch an diesem Code?? Vielen Dank für die Hilfe.

ConstantGardener 8. Sep 2007 18:52

Re: Invalid use of keyword. Token .....
 
Hallo Gelson62,

du solltest beim einbinden von Datumsangaben in SQL-Statements mit Parmetern arbeiten. Stichwort TQuery.ParamsByName....

Gruß ConstantGardener

ps. vor dem WHERE fehlt auch noch ein Leerzeichen !!

marabu 8. Sep 2007 19:08

Re: Invalid use of keyword. Token .....
 
Herzlich willkommen in der Delphi-PRAXiS, Gelson62.

Die Fehlermeldung rührt daher, dass du dein Datum nicht als String-Literal in das Statement eingefügt hast - QuotedStr(DateToStr(DateTimePicker3.Date)) wäre richtig gewesen. Da du aber oft erst Handbücher wälzen musst um heraus zu finden, welches Format beim Datum erwartet wird, ist es wirklich besser, wenn du mit Parameterübergabe arbeitest:

Delphi-Quellcode:
procedure TForm1.Button3Click(Sender: TObject);
begin
  DBGrid1.DataSource := DataSource4;
  with Query1 do
  begin
    SQL.Text := 'Select * from Kunde.DB where Request_Formular = :datum';
    Params.ParamByName.AsDateTime := Trunc(DateTimePicker3.Date);
    // RequestLive := True; // besser im Object Inspector setzen
    Open;
  end;
end;
Freundliche Grüße vom marabu

Gelson62 8. Sep 2007 19:18

Re: Invalid use of keyword. Token .....
 
Danke marabu für die Hilfe

Ich glaube aber, dass da nicht genügend Parameter vorhanden sind. Wenn ich das Script solaufen lasse wie Du es ^schreibst meldet der Compiler das nicht genügend Parameter da sind bei "Params.ParamByName.AsDateTime".

DeddyH 8. Sep 2007 19:20

Re: Invalid use of keyword. Token .....
 
Er meinte
Delphi-Quellcode:
Params.ParamByName('datum').AsDateTime

Gelson62 8. Sep 2007 19:28

Re: Invalid use of keyword. Token .....
 
Geht leider immer noch nicht. Compilieren kann er es jetzt, doch zur Laufzeit gibt es den Fehler:

Query1: Parameter 'datum' not found.

Bin vielleicht zu blöd um den Fehler zu sehen.

DeddyH 8. Sep 2007 19:34

Re: Invalid use of keyword. Token .....
 
Wie sieht der Source denn jetzt aus?

Gelson62 8. Sep 2007 19:37

Re: Invalid use of keyword. Token .....
 
Delphi-Quellcode:
procedure TForm1.Button3Click(Sender: TObject);
begin
  DBGrid1.DataSource := DataSource4;
  with Query1 do
  begin
    SQL.Text := 'Select * from Kunde.DB where Request_Formular = :datum';
    Params.ParamByName('datum').AsDateTime := Trunc(DateTimePicker3.Date);
    Open;
  end;
end;
Der sieht so aus

Die Muhkuh 8. Sep 2007 19:39

Re: Invalid use of keyword. Token .....
 
Hi,

soweit ich mich erinnern kann, musst Du davor .UseParam(s) (oder ähnlich) auf true stellen:

Delphi-Quellcode:
  DBGrid1.DataSource := DataSource4;
  with Query1 do
  begin
    UseParams := true;
    SQL.Text := 'Select * from Kunde.DB where Request_Formular = :datum';
    Params.ParamByName('datum').AsDateTime := Trunc(DateTimePicker3.Date);
    Open;
  end;
end;

DeddyH 8. Sep 2007 19:41

Re: Invalid use of keyword. Token .....
 
Das wäre mir neu. Aber evtl. hilft ein Close vor dem Neubelegen des SQL.


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:22 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz