AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Fehler in SQL-Syntax
Thema durchsuchen
Ansicht
Themen-Optionen

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      
bra

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

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

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

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

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

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

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

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
Delbor

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

AW: Fehler in SQL-Syntax

  Alt 19. Sep 2017, 13:16
Hi Uwe Raabe

Ich hatte die Datei (*.sql) mit Notepad++ geladen. Der hat auch Syntaxhighliting, auch für diverse Dateiendungen. Ausgereizt habe ich dessen Möglichkeiten allerdings noch nicht wirklich.
Aber auch so ist er nützlich, kann er doch das eine oder andere, das Texteditoren normalerweise nicht können.

Gruss
Delbor

PS: Die neunen Beiträge habe ich soeben gesehen, möchte aber gesondert darauf eingehen
Angehängte Grafiken
Dateityp: jpg MySQL-Workbenchexport.JPG (91,8 KB, 20x aufgerufen)
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
Benutzerbild von haentschman
haentschman

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

AW: Fehler in SQL-Syntax

  Alt 19. Sep 2017, 13:38
Moin...
Einspruch euer Ehren...
Zitat:
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:
Das öffnet der SQL Injection Tor und alle Türen.
https://de.wikipedia.org/wiki/SQL-Injection

Die SQL sollten nie vom User änderbar sein.

PS:
Zitat:
ignorieren den von haentschman:
...sagt mein Arzt auch immer. "Alle ingnorieren mich! Der nächste bitte."

Zitat:
Hat den Vorteil, man muss bei Scriptänderungen nicht auch das Programm ändern.
Aber auch den Nachteil, unabhängig von der Injection, daß der User das Programm ins Code Nirvana schicken kann.

Geändert von haentschman (19. Sep 2017 um 13:47 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
 
#10

AW: Fehler in SQL-Syntax

  Alt 19. Sep 2017, 13:58
Das öffnet der SQL Injection Tor und alle Türen.
Ist zwar bei Resourcen nicht ganz so einfach, aber auch möglich: http://www.angusj.com/resourcehacker/
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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:19 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