![]() |
Invalid use of keyword. Token .....
Hallo zusammen
Habe folgenden Code in meinem Programm (Delphi 7):
Delphi-Quellcode:
Wenn ich das Programm laufen lasse und auf den Button klicke erscheint die Fehelermeldung:
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; 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. |
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 !! |
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:
Freundliche Grüße vom marabu
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; |
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". |
Re: Invalid use of keyword. Token .....
Er meinte
Delphi-Quellcode:
Params.ParamByName('datum').AsDateTime
|
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. |
Re: Invalid use of keyword. Token .....
Wie sieht der Source denn jetzt aus?
|
Re: Invalid use of keyword. Token .....
Delphi-Quellcode:
Der sieht so aus
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; |
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; |
Re: Invalid use of keyword. Token .....
Das wäre mir neu. Aber evtl. hilft ein Close vor dem Neubelegen des SQL.
|
Re: Invalid use of keyword. Token .....
Hallo,
die Zuweisung an SQL.Text sorgt normalerweise für das Close - nur nicht dann, wenn das Statement sich gar nicht ändert. Und CheckParams ist standardmäßig auf True, wenn ich nicht irre:
Delphi-Quellcode:
Und achtet auf den Aufruf von Trunc().
procedure TForm1.Button3Click(Sender: TObject);
begin DBGrid1.DataSource := DataSource4; with Query1 do begin // SQL.Text := 'Select * from Kunde.DB where Request_Formular = :datum'; // ab in den OI damit Close; Params.ParamByName('datum').AsDateTime := Trunc(DateTimePicker3.Date); // RequestLive := True; // besser im Object Inspector setzen Open; end; end; Gute Nacht |
Re: Invalid use of keyword. Token .....
Genau marabu, das war's. Du hast Dich nicht geirrt. Wenn ich das SQL Statement in den OI schiebe funktionierts tadellos. Vielen Dank Euch dreien. Echt Klasse!!
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:01 Uhr. |
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