![]() |
Datenbank: SQLite • Version: 3 • Zugriff über: FireDac
Fehler in SQL-Syntax
Hi zusammen
Die Fehlermeldung: Zitat:
Delphi-Quellcode:
Das ist die Fortsetzung aus diesem
function TDMLSQLite.CreateTblHtml :String; // "ContentMasterData". ContentMasterData.
var SQLString: String; begin SQLString := 'CREATE TABLE tbl_Html('+ 'idHtml INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,'+ 'MenueCSS INTEGER NOT NULL CHECK(MenueCSS>=0),'+ 'PageCSS INTEGER NOT NULL CHECK(PageCSS>=0),'+ 'MenueID INTEGER NOT NULL CHECK(MenueID>=0),'+ 'HTMLPage LONGTEXT NOT NULL,'+ 'URL VARCHAR(45) NOT NULL,'+ 'tbl_Javascript_idJavascript INTEGER NOT NULL,'+ 'tbl_CSS_idCSS INTEGER NOT NULL CHECK(tbl_CSS_idCSS>=0),'+ 'tblgalerie_Gallery_ID INTEGER NOT NULL CHECK(tblgalerie_Gallery_ID>=0),'+ 'CONSTRAINT fk_tbl_Html_tbl_Javascript1'+ 'FOREIGN KEY(tbl_Javascript_idJavascript)'+ 'REFERENCES tbl_Javascript(idJavascript),'+ 'CONSTRAINT fk_tbl_Html_tbl_CSS1'+ 'FOREIGN KEY(tbl_CSS_idCSS)'+ 'REFERENCES tbl_CSS(idCSS),'+ 'CONSTRAINT fk_tbl_Html_tblgalerie1'+ 'FOREIGN KEY(tblgalerie_Gallery_ID)'+ 'REFERENCES tblgalerie(Gallery_ID))'; Result := SQLString; end; ![]()
Delphi-Quellcode:
"Corpus Delicti" ist der 7. Aufruf. Ich hatte da auch schon eine fehlende abschliessende Klammer bemerkt, aber bei diesem Fehler bin ich nun echt ratlos.
procedure TDMLSQLite.ContentmasterDBCreate2;
begin if ConnectContentmasterDB then begin if ExecuteSQL(CreateTbl_Bld) then if ExecuteSQL(CreateTbl_Galery) then if ExecuteSQL(CreateTbl_Album) then if ExecuteSQL(CreateTbl_bildtext) then if ExecuteSQL(CreateTblCSS) then if ExecuteSQL(CreateTblJavascript) then if ExecuteSQL(CreateTblHtml) then //<<=== .... end; end; Im folgenden noch die Funktion, wie sie von MySQL-Workbench exportiert wurde:
Delphi-Quellcode:
Was habe ich übersehen?
CREATE TABLE "ContentMasterData"."tbl_Html"(
"idHtml" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "MenueCSS" INTEGER NOT NULL CHECK("MenueCSS">=0), "PageCSS" INTEGER NOT NULL CHECK("PageCSS">=0), "MenueID" INTEGER NOT NULL CHECK("MenueID">=0), "HTMLPage" LONGTEXT NOT NULL, "URL" VARCHAR(45) NOT NULL, "tbl_Javascript_idJavascript" INTEGER NOT NULL, "tbl_CSS_idCSS" INTEGER NOT NULL CHECK("tbl_CSS_idCSS">=0), "tblgalerie_Gallery_ID" INTEGER NOT NULL CHECK("tblgalerie_Gallery_ID">=0), CONSTRAINT "fk_tbl_Html_tbl_Javascript1" FOREIGN KEY("tbl_Javascript_idJavascript") REFERENCES "tbl_Javascript"("idJavascript"), CONSTRAINT "fk_tbl_Html_tbl_CSS1" FOREIGN KEY("tbl_CSS_idCSS") REFERENCES "tbl_CSS"("idCSS"), CONSTRAINT "fk_tbl_Html_tblgalerie1" FOREIGN KEY("tblgalerie_Gallery_ID") REFERENCES "tblgalerie"("Gallery_ID") ); Gruss Delbor |
AW: Fehler in SQL-Syntax
Also ich habe das Statement gerade mal in einem SQLite Manager mit einer neuen Datenbank ausgeführt. Das lief ohne Probleme. Das Statement als solches scheint zumindest mal in Ordnung zu sein.
|
AW: Fehler in SQL-Syntax
Zitat:
'CONSTRAINT fk_tbl_Html_tbl_Javascript1FOREIGN KEY(tbl_Javascript_idJavascript)' |
AW: Fehler in SQL-Syntax
Zitat:
Aber meine Aussage stimmt ja trotzdem. Das Statement aus solches funktioniert und ist korrekt. :-D |
AW: Fehler in SQL-Syntax
Ich bin sehr sicher, dass da
> 'CONSTRAINT fk_tbl_Html_tblgalerie1'+ > 'FOREIGN KEY(tblgalerie_Gallery_ID)'+ ein Leerzeichen fehlt + zusammengesetzt dieses draus wird > 'CONSTRAINT fk_tbl_Html_tblgalerie1FOREIGN KEY(tblgalerie_Gallery_ID)'+ HTH |
AW: Fehler in SQL-Syntax
Darum am besten am Ende oder Anfang jeder Zeile ein Leerzeichen einfügen.
|
AW: Fehler in SQL-Syntax
Um solchen Fehlern aus dem Weg zu gehen, nehme ich da immer Stringlisten. Der zusätzliche Schreibaufwand ist deutlich geringer als die Zeit, die man zur Fehlersuche benötigt.
Delphi-Quellcode:
Und schlechter zu lesen ist es auch nicht.
function TDMLSQLite.CreateTblHtml :String; // "ContentMasterData". ContentMasterData.
var SQLString: TStringList; begin SQLString := TStringList.Create; SQLString.Add('CREATE TABLE tbl_Html('); SQLString.Add(' idHtml INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,'); SQLString.Add(' MenueCSS INTEGER NOT NULL CHECK(MenueCSS>=0),'); SQLString.Add(' PageCSS INTEGER NOT NULL CHECK(PageCSS>=0),'); SQLString.Add(' MenueID INTEGER NOT NULL CHECK(MenueID>=0),'); SQLString.Add(' HTMLPage LONGTEXT NOT NULL,'); SQLString.Add(' URL VARCHAR(45) NOT NULL,'); SQLString.Add(' tbl_Javascript_idJavascript INTEGER NOT NULL,'); SQLString.Add(' tbl_CSS_idCSS INTEGER NOT NULL CHECK(tbl_CSS_idCSS>=0),'); SQLString.Add(' tblgalerie_Gallery_ID INTEGER NOT NULL CHECK(tblgalerie_Gallery_ID>=0),'); SQLString.Add('CONSTRAINT fk_tbl_Html_tbl_Javascript1'); SQLString.Add(' FOREIGN KEY(tbl_Javascript_idJavascript)'); SQLString.Add(' REFERENCES tbl_Javascript(idJavascript),'); SQLString.Add('CONSTRAINT fk_tbl_Html_tbl_CSS1'); SQLString.Add(' FOREIGN KEY(tbl_CSS_idCSS)'); SQLString.Add(' REFERENCES tbl_CSS(idCSS),'); SQLString.Add('CONSTRAINT fk_tbl_Html_tblgalerie1'); SQLString.Add(' FOREIGN KEY(tblgalerie_Gallery_ID)'); SQLString.Add(' REFERENCES tblgalerie(Gallery_ID))'; Result := SQLString.Text; SQLString.Free; end; |
AW: Fehler in SQL-Syntax
Hi zusammen
Vielen Dank an euch alle!! Ich hätte das noch öfters übersehen, trotz Vergleichen mit dem Original-Export!
Delphi-Quellcode:
Nach euren Rückmeldungen fällt mir jetzt auf: Die Zeilen oberhalb der Constraintsangaben enden alle mit ",'+", haben also auch keine Leerzeichen - dafür mit dem Komma aber ein Trennzeichen, so dass der Compiler nicht "an der Nase herumgeführt" werden kann.
'tbl_CSS_idCSS INTEGER NOT NULL CHECK(tbl_CSS_idCSS>=0),'+
'tblgalerie_Gallery_ID INTEGER NOT NULL CHECK(tblgalerie_Gallery_ID>=0),'+ 'CONSTRAINT fk_tbl_Html_tbl_Javascript1'+ 'FOREIGN KEY(tbl_Javascript_idJavascript)'+ 'REFERENCES tbl_Javascript(idJavascript),'+ 'CONSTRAINT fk_tbl_Html_tbl_CSS1'+ 'FOREIGN KEY(tbl_CSS_idCSS)'+ 'REFERENCES tbl_CSS(idCSS),'+ Zu Nahpeds Vorschlag mit der Stringliste: Mal sehen, ob ich mir das angewöhnen kann... Nachtrag: Zitat:
Meine Lösung dafür: Eine Quelltextvorlage. Die kan dann auch gleich das Handling mit der Stringliste enthalten. Der Rest ist Copy&Paste und Drag&Drop... Gruss Delbor |
AW: Fehler in SQL-Syntax
Liste der Anhänge anzeigen (Anzahl: 2)
Solche SQL Skripte editiere ich gerne in einer separaten Textdatei mit Extension SQL. Da bekomme ich in der IDE nämlich auch gleich eine entsprechende Syntaxhervorhebung. Passt dann alles, wird der Text über Copy und MultiPaste (im Menü Bearbeiten - Mehrfach einfügen) mit dem entsprechenden Prefix/Postfix versehen eingefügt. Dann muss lediglich noch am Ende etwas korrigiert werden.
|
AW: Fehler in SQL-Syntax
Moin...:P
[OT] Du bist der richtige Kandidat für SQL States in Ressourcen. Da fallen ALLE "SQL.Add" bzw. "+" einfach weg. :wink: ![]() [Achtung Schleichwerbung] Mit meinem SQL Resource Creator kannst du auch das Statement direkt testen... :thumb: Statt: Zitat:
![]() [/OT] :wink: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:59 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 by Thomas Breitkreuz