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 2  1 2   
Fritzew

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

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.611 Beiträge
 
Delphi 10.3 Rio
 
#2

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
Benutzerbild von TigerLilly
TigerLilly

Registriert seit: 24. Mai 2017
Ort: Wien, Österreich
1.241 Beiträge
 
Delphi 12 Athens
 
#3

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
 
#4

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
 
#5

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.192 Beiträge
 
Delphi 11 Alexandria
 
#6

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
11.646 Beiträge
 
Delphi 12 Athens
 
#7

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.
Angehängte Grafiken
Dateityp: png 2017-09-19_13-49-17.png (34,8 KB, 25x aufgerufen)
Dateityp: png 2017-09-19_13-49-53.png (22,0 KB, 33x aufgerufen)
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.436 Beiträge
 
Delphi 12 Athens
 
#8

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
Benutzerbild von Uwe Raabe
Uwe Raabe
Online

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

AW: Fehler in SQL-Syntax

  Alt 19. Sep 2017, 13:09
...@Uwe: sorry.
Kein Problem! Kann ja jeder selbst entscheiden, ob er seine SQL-Statements als String-Konstante oder String-Resource haben will.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#10

AW: Fehler in SQL-Syntax

  Alt 19. Sep 2017, 13:12
Gehen wir mit Uwes Vorschlag noch etwas weiter und ignorieren den von haentschman:

Die Scripte werden als Dateien gespeichert und zur Laufzeit geladen. Hat den Vorteil, man muss bei Scriptänderungen nicht auch das Programm ändern. Man lädt einfach nur die Scripte und gut ist:
Delphi-Quellcode:
function TDMLSQLite.CreateTblHtml :String; // "ContentMasterData". ContentMasterData.
  var SQLString: TStringList;
begin
  SQLString := TStringList.Create;
  SQLString.LoadFromFile('TblHtml.sql');
  Result := SQLString.Text;
  SQLString.Free;
Wenn man's noch weiter vereinfacht, dann übergibt man den Namen des Scriptes als Parameter und muss nicht mehr für jede Tabelle ... eine eigene Funktion erstellen.
SQL-Code:
-- Erstellscript für die Tabelle tbl_html
-- Scriptedate: tbl_html.sql
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)
);
Delphi-Quellcode:
function TDMLSQLite.CreateTbl(AScriptName : String) :String;
  var SQLString: TStringList;
begin
  if FileExists(AScriptName) then begin
    SQLString := TStringList.Create;
    SQLString.LoadFromFile(AScriptName);
    Result := SQLString.Text;
    SQLString.Free;
  end else begin
    MessageDlg(Format('Script nicht gefunden: %s',[AScriptName]),mtError,[mbOK],0);
  end;
end;
Vorteil:
Funktionierende Scripte kann man nicht mehr versehentlich "verunstalten".
Scriptänderungen haben keine direkte Auswirkung auf das Kompilat des Programmes.

Geändert von nahpets (19. Sep 2017 um 13:13 Uhr) Grund: Schreibfehler - wie immer :-(
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

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 16:30 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