![]() |
Datenbank: Firebird Embedded • Version: 2.1.2 • Zugriff über: ZEOS 6.6.4
[Zeos] Probleme mit Parametern bei SQL - Statement
Hi ihr,
Um für meinen ![]() 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:
So wird die Verbindung aufgebaut:
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;
Delphi-Quellcode:
Es scheint, als würden in dem Code oben die Parameter nicht verarbeitet werden. Zumindest sieht der resultierende SQL - String so aus:
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;
SQL-Code:
Sieht jemand, was ich falsch mache?
INSERT INTO `NODES` (TILE, TIMESTAMP, TAGS, VISIBLE, USER_ID, LONGITUDE, LATITUDE, ID) VALUES (?, ?, ?, ?, ?, ?, ?, ?)
|
Re: [Zeos] Probleme mit Parametern bei SQL - Statement
Edit: Vielleicht hilft ein zusätzlicher "Prepare()"-Aufruf.
Viele Grüße |
Re: [Zeos] Probleme mit Parametern bei SQL - Statement
Parameter werden serverseitig angewendet. Deshalb verändern sie den Abfragestring nicht.
|
Re: [Zeos] Probleme mit Parametern bei SQL - Statement
Zitat:
Prepare() kennt ZEOS irgendwie nicht.. :gruebel: An .Add liegt es vermutlich nicht, weil ich das Objekt ja frisch erstellt habe. Ich habe trotzdem mal auf .Text umgestellt. Das Problem löst es leider nicht.. :( |
Re: [Zeos] Probleme mit Parametern bei SQL - Statement
Moin,
Achso, ja, ich vergaß, ZEOS macht ein "Prepare()" immer nur intern, für den Nutzer gibt es eine solche Funktion nicht... Also zur Darstellung hat mkinzler ja schon was geschrieben ... die Frage ist nun, ob der Datensatz nun korrekt in der DB landet oder nicht? |
Re: [Zeos] Probleme mit Parametern bei SQL - Statement
Hm.. Also, die Fehlermeldung lautet im Wortlaut:
Code:
---------------------------
Benachrichtigung über Debugger-Exception --------------------------- Im Projekt saxxmltest.exe ist eine Exception der Klasse EZSQLException mit der Meldung 'SQL Error: Dynamic SQL Error SQL error code = -104 Token unknown - line 1, column 13 `. Error Code: -104. Invalid token The SQL: INSERT INTO `NODES` (TILE, TIMESTAMP, TAGS, VISIBLE, USER_ID, LONGITUDE, LATITUDE, ID) VALUES (?, ?, ?, ?, ?, ?, ?, ?); ' aufgetreten. --------------------------- Anhalten Fortsetzen Hilfe --------------------------- |
Re: [Zeos] Probleme mit Parametern bei SQL - Statement
Das Problem scheint zu sein, dass Firebird die ` um `NODES` nicht mag. Lass die mal weg, müsste auch ohne gehen... ;)
|
Re: [Zeos] Probleme mit Parametern bei SQL - Statement
Ersetze die Hochkommas um `NODES` mit "NODES" oder lass diese ganz weg
|
Re: [Zeos] Probleme mit Parametern bei SQL - Statement
Das war's. :thumb:
Ihm gefielen die Hochkommas nicht, bei TIMESTAMP haben sie gefehlt. ;) Kleine Frage am Rande: Ich habe mehrere 100.000 Nodes, die ich in die Tabelle einfügen muss. Für jedes fahre ich ein eigenes "INSERT INTO" Statement auf. Dabei habe ich das Gefühl, dass sich die Performance in Grenzen hält. Kann man da noch was machen, bspw. mehrere Zeilen auf einmal einfügen? Oder ist "INSERT INTO" nur auf eine Zeile beschränkt? :gruebel: |
Re: [Zeos] Probleme mit Parametern bei SQL - Statement
Das hatte ich auch mal. Es ging wesentlich schneller, als ich
Code:
also ein großes SQL-Statement mit allen Datensätzen rausgeschickt habe.
INSERT INTO ... VALUES (..., ..., ...), (..., ..., ...), ...
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:22 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