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
hsg

Registriert seit: 24. Apr 2006
Ort: Wustermark
354 Beiträge
 
Delphi 10.3 Rio
 
#1

AW: Fehler in SQL-Syntax

  Alt 19. Sep 2017, 14:06
Alternative zur Speicherung in Dateien: Speicherung in einer Datenbank-Tabelle
So mache ich es inzwischen bei einer Applikation. Dabei sind die Statements noch zusätzlich aufgeteilt in "Select", "Join", "Where" und "Order"-Abschnitt. Bei Bedarf kann so das verwendete Statement noch entsprechend vom Programm (z.B. durch Angabe von zusätzlichen Where-Bedingungen, Joins oder Sortierreihenfolgen) angepasst werden.
Zwei kleine Funktionen liefern mir dann das passende Skript an die benötigte Stelle.

Normale Benutzer kommen so an die Statements nicht heran, reduziert also deutlich die Gefahr der Injection.
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#2

AW: Fehler in SQL-Syntax

  Alt 19. Sep 2017, 14:52
Ob Datei, Resource, Datenbank oder direkt im Programmcode:

Kommt auf die Aufgabe an.

Software für Normalverbraucher und spielwütige: Alles im Programmcode.

Resource, wenn man in bedingtem Umfang datenbankunabhängig sein will.
Es wird die entsprechende Resource eingebunden. SQL ist ja leider nicht gleich SQL, die Unterschiede bei den Dialekten können schon recht gravierend sein.

Datenbank: Das hat was, mache ich auch meist so. Anpassungen sind jederzeit möglich. Aber es wird ein entsprechendes Berechtigungssystem benötigt, damit nicht jeder da "rumwuseln" kann, sondern nur die, die dazu autorisiert sind. Im professionellen Umfeld also eher ein Datenbankadmin.

Datei ist eigentlich ähnlich zur Datenbank zu sehen: Nicht jeder darf, sondern nur autorisierte. Ansonsten sind die Scripte so abgelegt, dass sie nicht allgemein zugänglich sind. Das dürfte in jeder vernünftigen, professionellen Umgebung gegeben sein.

ZIP ...: Die kann man passwortgeschützt erstellen, da kann dann auch so schnell keiner mal eben was dran ändern. Auch darüber kann man dann Scripte datenbankunabhängig zur Verfügung stellen. Je Datenbanktyp eine ZIP mit den passenden Scripten. Ausgeliefert wird die, die zur Datenbank des Kunden passt.

Keine der Möglichkeiten ist grundsätzlich besser als die anderen und keine ist grundsätzlich abzulehnen. Es kommt halt auf die konkret zu erstellende Software und die Umgebung, in der sie zum Einsatz kommen wird, an.
  Mit Zitat antworten Zitat
Delbor

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

AW: Fehler in SQL-Syntax

  Alt 19. Sep 2017, 20:08
Hi zusammen
Neueste Fehlermeldung:
Zitat:
---------------------------
Im Projekt SQLiteTestProject.exe ist eine Exception der Klasse ESQLiteNativeException mit der Meldung '[FireDAC][Phys][SQLite] ERROR: unknown database tbl_Html' aufgetreten.
---------------------------
Die bisher debattierte Funktion läuft nun durch (Und sollte die jetzt vemisste Tabelle erzeugen). Laut einem Journal wird sie das aber nicht. Das Journal lege ich mal bei.

Delphi-Quellcode:
    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
      if ExecuteSQL(CreateIndexTbl_Html_Tbl_CSS1) then
Das ist die Reihenfolge der Aufrufe. Der Code läüft also durch und die Tabelle wird (scheinbar?) erzeugt. Anbei die Funktion Execute, die das SQL-Statement ausführt
Delphi-Quellcode:
  function TDMLSQLite.ExecuteSQL(ASQL : String) : Boolean;
  begin
    try
      FDSQLiteConnection.ExecSQL(ASQL);
      Result := True;
    except
      on E: EDatabaseError do
      begin
        ShowMessage('Fehler beim Ausführen des Statements:' + #13#13 + ASQL + #13#13 + E.Message);
        Result := False;
      end;
    end;
  end;
Wenn die Tabelle also nicht erzeugt wurde, hätte die Fehlermeldung angezeigt werden müsssen...

Gruss
Delbor
Angehängte Dateien
Dateityp: txt ContentmasterData-sqlite-journal.txt (4,5 KB, 5x 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 TigerLilly
TigerLilly

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

AW: Fehler in SQL-Syntax

  Alt 19. Sep 2017, 20:15
Die Exception würde nur aufgezeigt, wenn sie vom Typ EDatabaseError ist.

Im Attachten Log(?) ist die HTML-Tabelle NICHT zu finden.

Logge doch ALLE Exceptions.
  Mit Zitat antworten Zitat
Delbor

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

AW: Fehler in SQL-Syntax

  Alt 19. Sep 2017, 20:34
Hi TigerLilly

Zitat:
Im Attachten Log(?) ist die HTML-Tabelle NICHT zu finden.
Genau desshalb denke ich eigentlich, dass die Tabelle gar nicht erstellt wurde. Somit kann sie auch nicht gefunden werden. Mich irritiert aber, das die Connection nicht reklamiert...

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

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

AW: Fehler in SQL-Syntax

  Alt 19. Sep 2017, 20:48
Wie gesagt, gib ALLE Exceptions aus, nicht nur EDatabaseError.
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#7

AW: Fehler in SQL-Syntax

  Alt 19. Sep 2017, 21:22
Der Rückgabewert der Funktion ist nur False, wenn ein Datenbankfehler geworfen wird. In anderen Fällen ist Result entweder True oder undefiniert.
(Eigentlich müsste es eine entsprechende Compilermeldung geben - Rückgabewert könnte undefiniert sein. o. ä .)

Wenn FDSQLiteConnection.ExecSQL(ASQL) ausgeführt wird und keine Exception fliegt, ist der Rückgabewert der Funktion true, unabhängig davon, ob das erwartete erledigt wurde oder nicht.
Delphi-Quellcode:
function TDMLSQLite.ExecuteSQL(ASQL : String) : Boolean;
begin
  Result := False;
  try
    FDSQLiteConnection.ExecSQL(ASQL);
    // Hier sollte man noch prüfen, ob das, was in ASQL gemacht werden
    // soll, auch wirklich gemacht wurde.
    // Bei Insert, Update und Delete findet man die Anzahl der
    // Änderungen in RowsAffected.
    // Bei 'ner Tabelle, die erstellt werden sollte, könnte man noch ein
    // select * from tabelle
    // hier ausführen und nur, wenn das erfolgreich ist folgt:
    Result := True;
  except
    on E: EDatabaseError do begin
      ShowMessage('Fehler beim Ausführen des Statements:' + #13#13 + ASQL + #13#13 + E.Message);
    end;
  end;
end;
  Mit Zitat antworten Zitat
Antwort Antwort

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 23:47 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