Einzelnen Beitrag anzeigen

Benutzerbild von Mithrandir
Mithrandir
(CodeLib-Manager)

Registriert seit: 27. Nov 2008
Ort: Delmenhorst
2.379 Beiträge
 
#1

[Zeos] Probleme mit Parametern bei SQL - Statement

  Alt 27. Apr 2009, 10:44
Datenbank: Firebird Embedded • Version: 2.1.2 • Zugriff über: ZEOS 6.6.4
Hi ihr,

Um für meinen Routenplaner möglichst schnell auf die entsprechenden Daten zugreifen zu können, nutze ich eine SQL-Datenbank.

Dabei dachte ich mir, ich könnte mit einem einfachen INSERT - Statement die Daten in die Datenbank eintragen. Allerdings funktioniert das nicht wie gedacht.

So werden die Daten in die Datenbank geschrieben:

Delphi-Quellcode:
procedure TORPDataBase.WriteNodeToDB(Node: TORPNode);
begin
  fQuery := TZQuery.Create(nil);
  try
    DecimalSeparator := '.';
    with fQuery do
    begin
      Connection := fConnection;
      ParamCheck := true;
      SQL.Add('INSERT INTO `NODES` (TILE, TIMESTAMP, TAGS, VISIBLE, USER_ID, LONGITUDE, LATITUDE, ID) VALUES (:tile, :timestamp, :tags, :visible, :userid, :lon, :lat, :id)');
      ParamByName('tile').AsInteger := 0;
      ParamByName('timestamp').AsDateTime := Now();
      ParamByName('tags').AsString := '';
      ParamByName('visible').AsInteger := 1;
      ParamByName('userid').AsInteger := 0;
      ParamByName('lon').AsFloat := StrToFloat(Node.Lon);
      ParamByName('lat').AsFloat := StrToFloat(Node.Lat);
      ParamByName('id').AsInteger := StrToInt(Node.ID);
      ExecSQL;
    end;
  finally
    fQuery.Free;
  end;
end;
So wird die Verbindung aufgebaut:

Delphi-Quellcode:
function TORPDatabase.Connect(DBUser, DBPassword, DBHostName: string): boolean;
begin
  with fConnection do
  begin
    Protocol := 'firebird-2.0';
    ReadOnly := false;
    User := DBUser;
    Password := Password;
    Database := fCompleteDBPath;
    HostName := DBHostName;
    if not FileExists(fCompleteDBPath) then
      CreateEmptyDB;
    Connect;
    Result := Connected;
  end;
end;
Es scheint, als würden in dem Code oben die Parameter nicht verarbeitet werden. Zumindest sieht der resultierende SQL - String so aus:

INSERT INTO `NODES` (TILE, TIMESTAMP, TAGS, VISIBLE, USER_ID, LONGITUDE, LATITUDE, ID) VALUES (?, ?, ?, ?, ?, ?, ?, ?) Sieht jemand, was ich falsch mache?
米斯蘭迪爾
"In einer Zeit universellen Betruges wird das Aussprechen der Wahrheit zu einem revolutionären Akt." -- 1984, George Orwell
  Mit Zitat antworten Zitat