![]() |
Datenbank: MySQL • Version: 3.51 • Zugriff über: MySQL ODBC Driver 3.51
EDBError: "Typ für Feld 'relative' unbekannt"
hi ihr,
ich hab ein problem mit mySQL. zugreifen tu ich über TDatabase/TQuery. mein code sieht so aus:
Delphi-Quellcode:
beim ausführen des INSERT-befehls bekomme ich unter bestimmten voraussetzungen den fehler:
try
Query.SQL.Clear(); Query.SQL.Add('start transaction;'); Query.ExecSQL(); Query.SQL.Clear(); Query.SQL.Add('TRUNCATE table greeting'); Query.ExecSQL(); Query.SQL.Clear(); Query.SQL.Add('INSERT INTO `greeting` (`topic`, `message`, `simple`) VALUES (" ", "'+AdvGreetingHTMLPreview.Caption+'", "0")'); Query.ExecSQL(); Query.SQL.Clear(); Query.SQL.Add('commit;'); Query.ExecSQL(); except Query.SQL.Clear(); Query.SQL.Add('rollback;'); Query.ExecSQL(); end;
Code:
der fehler kommt nur, wenn innerhalb des SQL-statements folgendes vorkommt:
---------------------------
Benachrichtigung über Debugger-Exception --------------------------- Im Projekt WebAdmin.exe ist eine Exception der Klasse EDatabaseError aufgetreten. Meldung: 'Typ für Feld 'relative' ist unbekannt'. Prozeß wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen. --------------------------- OK Hilfe --------------------------- Zitat:
sobald dies innerhalb meines TQuery.SQL steht, bekomm ich diesen fehler an den kopf geworfen. an der mysql kanns eigentlich nicht liegen, da ich mir das vom code genrierte statement kopiert und in phpMyAdmin getestet habe - klappt einwandfrei. irgendwie muss der ODBC-treiber die angabe "foo:bar" als eine art feld interpretieren, dass er nicht kennt. das problem an der sache ist, dass ich HTML-code in die tabelle einfügen muss. ich habe schon versucht, anführungszeichen zu escapen etc., aber das einzige, was hilft, ist den doppelpunkt aus dem string zu entfernen - was aber den informationsgehalt zerstört :( könnt ihr mir helfen? danke schonmal, aenogym |
Re: EDBError: "Typ für Feld 'relative' unbekannt"
Du verwendest eine falsche SQL-Syntax!
1.) Feld- und Tabellennamen werden nicht in Hochkomma's oder Akzentzeichen (´) gesetzt. 2.) Feld- und Tabellennamen dürfen in Anführungszeichen (") gesetzt werden. 3.) Stringliterale werden in einfache Hochkomma's gesetzt 4.) Verwende Parameter (<-die sauberste Lösung) oder zumindest die Funktion QuotedStr()
Delphi-Quellcode:
5.) statt Query.SQL.Clear und Query.SQL.Add reicht ein Query.SQL.Text := ...
Query.SQL.Text := 'INSERT INTO greeting (topic, message, simple) VALUES ('+QuotedStr(' ')+', '+QuotedStr(AdvGreetingHTMLPreview.Caption)+','+QuotedStr('0')+')';
|
Re: EDBError: "Typ für Feld 'relative' unbekannt"
danke für deine antwort, shmia.
Zitat:
Zitat:
(übrigens funktionierte die syntax mit dne akzenten etc. bis jetzt überall) danke dir! :) aenogym |
Re: EDBError: "Typ für Feld 'relative' unbekannt"
zu früh gefreut :(
das problem ist mit dieser syntax noch immer das gleiche. dann werde ich mich mal über parameter informieren :coder: aenogym edit: und wieder was dazugelernt. parameter scheinen der grund für mein problem zu sei und ich hoffe, dass sie auch die lösung sind :) (falls sich wer wundert: ich arbiete heute zume rsten mal mit den datenbank-komponenten ;) ) |
Re: EDBError: "Typ für Feld 'relative' unbekannt"
Zitat:
Das hängt auch von ANSI_QUOTES ab: ![]() Man sollte trotzdem immer den Vorgaben von SQL-92 folgen! Es scheint die Strategie fast aller Datenbank-Hersteller zu sein, SQL-92 zu unterstützen, aber ausserdem eine geänderte Syntax zuzulassen. Wenn ein Kunde eine grosse Datenbank + Anwendung entwickelt hat, kann er die Datenbank nicht mehr wechseln, da andere Datenbanken z.B. mit dem Akzent nicht klarkommen. (Aus dem gleichen Grund haben Felgen der Autohersteller einen unterschiedlichen Lochkreis & Nabendurchmesser) |
Re: EDBError: "Typ für Feld 'relative' unbekannt"
klingt einleuchtend ;)
danke dir, mit parametern klappt's hervorragend aenogym |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:23 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