Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Query: Parameter nicht gefunden (https://www.delphipraxis.net/100899-query-parameter-nicht-gefunden.html)

hoika 5. Okt 2007 09:51

Datenbank: FB • Version: 1.5 • Zugriff über: BDE

Query: Parameter nicht gefunden
 
Hallo,

jaja BDE, immer noch, bin ja schon beim Umstellen ;)

Aber nun zur Frage

Delphi-Quellcode:
Query: TQuery
    with Query do
    begin
      SQL.Clear;
      SQL.Add('Select * From ResPersonGroup_Person');
      SQL.Add('Where ((PersonalId=:PersonalId)');
      SQL.Add('And (Not ((:TheEndDate<StartDate) Or (:TheStartDate>EndDate))))');
      ParamByName('TheEndDate').AsDateTime  := theEndDate;  <<-- hier kommt der Fehler
      ParamByName('TheStartDate').AsDateTime := theStartDate;
      ParamByName('PersonalId').AsInteger   := thePersonalId;
Hier kommt beim 1. und 2. ParamByName ein Fehler ?
ParamByName('PersonalId') klappt noch (wenn ich die Zeilen mal umdrehe)
Ein Params[x] klappt auch (so habe ich das jetzt erst mal "notgelöst")


Was ist den hier kaputt ???
Das hatte ich ja noch nie.

Hat das vielleicht damit zu tun, dass die BDE damit überfordert ist,
weil der Parameter vor dem Wert steht ?.


Ein verwunderter Heiko



OK: Lösung
Delphi-Quellcode:
      SQL.Clear;
      SQL.Add('Select * From ResPersonGroup_Person');
      SQL.Add('Where (PersonalId=:PersonalId)');
      SQL.Add('And (Not ((StartDate>=:TheEndDate) Or (EndDate<=:TheStartDate)))');
      ParamByName('PersonalId').AsInteger   := thePersonalId;
      ParamByName('TheEndDate').AsDateTime  := theStartDate;
      ParamByName('TheStartDate').AsDateTime := theEndDate;
Hm, die BDE hat sich wohl doch daran gestört, dass der Parameter vor dem Vergleich stand.

mkinzler 5. Okt 2007 09:59

Re: Query: Parameter nicht gefunden
 
Was für ein Fehler kommt?
Zitat:

weil der Parameter vor dem Wert steht ?.
Dann dreh die Bedingung doch mal um.

BTW.
Statt .Clear + .Add besser .Text
Zu viele Klammern erschweren die Übersicht.

Hansa 5. Okt 2007 10:13

Re: Query: Parameter nicht gefunden
 
Vorab : komme nicht auf die Idee in Zukunft ein TFIBQuery zu verwenden. Immer Datasets ! :zwinker:

Die Frage ist allerdings logisch nicht nachzuvollziehen. Da wird lediglich ein String zusammengesetzt. Der wird an die DB geschickt und das sollte es sein. Das dürfte sogar die BDE können. Aber wer weiß ? :mrgreen:

dataspider 5. Okt 2007 10:41

Re: Query: Parameter nicht gefunden
 
Hi,

IMHO sollte vor der Benutzung von Parametern ein Prepare erfolgen.
Bei Zuweisung von SQL im Code würde ich auch vorher ein UnPrepare aufrufen.
[EDIT]

also
Delphi-Quellcode:
if Prepared then
  UnPrepare;
SQL.Clear;
SQL.Add('Select *...');
Prepare;
ParamByName('PersonalId').AsInteger := thePersonalId;
...
Cu, Frank

Hansa 5. Okt 2007 10:46

Re: Query: Parameter nicht gefunden
 
Ist zwar normalerweise völlig überflüssig, aber bei der BDE könnte er damit Recht haben.

hoika 5. Okt 2007 14:47

Re: Query: Parameter nicht gefunden
 
Hallo,

mit dem FBDataSet kann ich mich nicht soanfreunden .. ;)

Zumal ich noch zu tun habe, ein paar olle TTable zu entfernen ... ;(

zum Prepare:
Wozu soll das gut sein ?

Die BDE, FIBPlus, Zeos usw. preparen automatisch.
Die Query wird nur einmal aufgerufen,
keine Schleife usw.

Zu Bde:
die Bde prüft bei ParamCheck=True, ob der Parameter
überhaupt in der Query existiert.
Der SQL-Monitor hat auch gezeigt.
Egal, ich habe den Parameter jetzt hinter dem Operator, da geht es.


Heiko


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:34 Uhr.

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