AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Fehler in SQL-Syntax

Fehler in SQL-Syntax

Ein Thema von Delbor · begonnen am 19. Sep 2017 · letzter Beitrag vom 20. Sep 2017
Antwort Antwort
Seite 1 von 3  1 23   
Delbor

Registriert seit: 8. Okt 2006
Ort: St.Gallen/Schweiz
1.186 Beiträge
 
Delphi 11 Alexandria
 
#1

Fehler in SQL-Syntax

  Alt 19. Sep 2017, 11:33
Datenbank: SQLite • Version: 3 • Zugriff über: FireDac
Hi zusammen
Die Fehlermeldung:
Zitat:
---------------------------
Im Projekt SQLiteTestProject.exe ist eine Exception der Klasse ESQLiteNativeException mit der Meldung '[FireDAC][Phys][SQLite] ERROR: near "KEY": syntax error' aufgetreten.
---------------------------
Und die auslösende Methode:
Delphi-Quellcode:
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;
Das ist die Fortsetzung aus diesem Thread. Der Aufruf der obigen function geschieht, wie mir da vorgeschlagen wurde:
Delphi-Quellcode:
  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;
"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.
Im folgenden noch die Funktion, wie sie von MySQL-Workbench exportiert wurde:
Delphi-Quellcode:
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")
);
Was habe ich übersehen?

Gruss
Delbor
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch
  Mit Zitat antworten Zitat
Aviator

Registriert seit: 3. Jun 2010
1.610 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: Fehler in SQL-Syntax

  Alt 19. Sep 2017, 11:38
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.
  Mit Zitat antworten Zitat
Fritzew

Registriert seit: 18. Nov 2015
Ort: Kehl
678 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Fehler in SQL-Syntax

  Alt 19. Sep 2017, 11:38
Zitat:
'CONSTRAINT fk_tbl_Html_tbl_Javascript1'+
'FOREIGN KEY(tbl_Javascript_idJavascript)'+
Was macht der Compiler wohl daraus?

'CONSTRAINT fk_tbl_Html_tbl_Javascript1FOREIGN KEY(tbl_Javascript_idJavascript)'
Fritz Westermann
  Mit Zitat antworten Zitat
Aviator

Registriert seit: 3. Jun 2010
1.610 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: Fehler in SQL-Syntax

  Alt 19. Sep 2017, 11:41
Zitat:
'CONSTRAINT fk_tbl_Html_tbl_Javascript1'+
'FOREIGN KEY(tbl_Javascript_idJavascript)'+
Was macht der Compiler wohl daraus?

'CONSTRAINT fk_tbl_Html_tbl_Javascript1FOREIGN KEY(tbl_Javascript_idJavascript)'
Möp. Der Kandidat hat 100 Punkte würde ich mal behaupten. Ich habe mir unten das Statement kopiert und da sind die Umbrüche natürlich enthalten.

Aber meine Aussage stimmt ja trotzdem. Das Statement aus solches funktioniert und ist korrekt.
  Mit Zitat antworten Zitat
TigerLilly

Registriert seit: 24. Mai 2017
Ort: Wien, Österreich
1.174 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Fehler in SQL-Syntax

  Alt 19. Sep 2017, 11:43
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
  Mit Zitat antworten Zitat
bra

Registriert seit: 20. Jan 2015
711 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#6

AW: Fehler in SQL-Syntax

  Alt 19. Sep 2017, 11:45
Darum am besten am Ende oder Anfang jeder Zeile ein Leerzeichen einfügen.
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#7

AW: Fehler in SQL-Syntax

  Alt 19. Sep 2017, 12:21
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:
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;
Und schlechter zu lesen ist es auch nicht.
  Mit Zitat antworten Zitat
Delbor

Registriert seit: 8. Okt 2006
Ort: St.Gallen/Schweiz
1.186 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Fehler in SQL-Syntax

  Alt 19. Sep 2017, 12:47
Hi zusammen

Vielen Dank an euch alle!! Ich hätte das noch öfters übersehen, trotz Vergleichen mit dem Original-Export!
Delphi-Quellcode:
'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),'+
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.

Zu Nahpeds Vorschlag mit der Stringliste: Mal sehen, ob ich mir das angewöhnen kann...

Nachtrag:
Zitat:
Der zusätzliche Schreibaufwand ist deutlich geringer als die Zeit, die man zur Fehlersuche benötigt.
Gerade bei solch importierten Scripten schauert mich eigentlich der Gedanke etwas, für jedes einzelne Statement einen Funktionskopf zu schreiben - und zu wohl 80 - 90% immer dasselbe eintippen zu müssen.
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
Roger
Man muss und kann nicht alles wissen - man muss nur wissen, wo es steht.
Frei nach Albert Einstein
http://roase.ch

Geändert von Delbor (19. Sep 2017 um 12:58 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe
Online

Registriert seit: 20. Jan 2006
Ort: Lübbecke
10.977 Beiträge
 
Delphi 12 Athens
 
#9

AW: Fehler in SQL-Syntax

  Alt 19. Sep 2017, 12:51
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.
Miniaturansicht angehängter Grafiken
2017-09-19_13-49-17.png   2017-09-19_13-49-53.png  
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.288 Beiträge
 
Delphi 12 Athens
 
#10

AW: Fehler in SQL-Syntax

  Alt 19. Sep 2017, 12:59
Moin...
[OT]
Du bist der richtige Kandidat für SQL States in Ressourcen. Da fallen ALLE "SQL.Add" bzw. "+" einfach weg.
http://www.delphipraxis.net/49505-sq...einbinden.html

[Achtung Schleichwerbung]
Mit meinem SQL Resource Creator kannst du auch das Statement direkt testen...
Statt:
Zitat:
Solche SQL Skripte editiere ich gerne in einer separaten Textdatei mit Extension SQL.
...@Uwe: sorry.

http://www.delphipraxis.net/190316-d...e-creator.html
[/OT]

Geändert von haentschman (19. Sep 2017 um 13:07 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:14 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