Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi DBX meldet Syntaxfehler wo keine sind (https://www.delphipraxis.net/175474-dbx-meldet-syntaxfehler-wo-keine-sind.html)

Der schöne Günther 24. Jun 2013 13:23

Datenbank: SQLite • Version: ? • Zugriff über: lokal

DBX meldet Syntaxfehler wo keine sind
 
Hallo.

Ich kenne mich mit Datenbanken in der Praxis nur sehr rudimentär aus. Ich weiß noch nicht einmal, ob ich die Felder "ergänzende Angaben" richtig asugefüllt habe. Mein Problem ist folgendes: Ich möchte mit Delphi einfach nur aus einer SQLite-DB mittels SELECT eine Ergebnismenge bekommen. Bislang ging das gut. Eine etwas komplexere Abfrage (Vereinigung zweier Abfragen mit Unterabfrage) scheitert nun - Angeblich sogar Syntaxfehler.

Normalerweise sucht man die Schuld bei sich selbst, nur bekommen andere Tools die exakt gleiche Abfrage auf der exakt gleichen Datenbank es ohne Probleme hin (SQLite Expert Personal oder SQLite Database Browser 2.0)!

Habe ich in Delphi irgendeine Einstellung vergessen?

Die Verbindung vom Typ
Delphi-Quellcode:
TSQLConnection
lege ich folgendermaßen an:
Delphi-Quellcode:
   sqlConnection := TSQLConnection.Create(nil);
   sqlConnection.Connected := False;
   sqlConnection.DriverName := 'Sqlite';

   sqlConnection.Params.Values['Database'] := startupFile;
   sqlConnection.Params.Values['FailIfMissing'] := 'True';
, abholen tue ich mir die Werte über
Delphi-Quellcode:
   query := '[...]';

   sqlConnection.Execute(
      query,
      nil,
      result
   );

   result.First();
   while not result.Eof do begin
      [...]
      result.Next();
   end;
Mache ich hier schon etwas falsch? Irgendeine "Aktiviere dies, wenn es etwas komplexer wird"-Einstellung vergessen? Ich habe auch die sqlite.dll gegen die sqlite.dll des "SQLite Expert Personal"-Tools ausgetauscht, das hat auch nichts gebracht.

baumina 24. Jun 2013 13:32

AW: DBX meldet Syntaxfehler wo keine sind
 
Evtl. liegt es daran, dass TSQLConnection nur unidirektional zugreifen kann, dein select aber mehr bräuchte.

Der schöne Günther 24. Jun 2013 13:39

AW: DBX meldet Syntaxfehler wo keine sind
 
Ich nix verstehen :(

Meine Abfrage vereint zwei SELECT-statements mittels UNION, erstere hat eine Unterabfrage die sich auf die Ergebnismenge der äußeren bezieht. Das ist neu, ganz einfache SELECT-Abfragen gingen bislang. Gut möglich, dass der Typ
Delphi-Quellcode:
TSQLConnection
nicht mehr reicht und jetzt etwas neues her muss. Nur was?

baumina 24. Jun 2013 13:46

AW: DBX meldet Syntaxfehler wo keine sind
 
Leider bietet Delphi von sich aus nur diesen unbrauchbaren unidirektionalen (kann nur in eine Richtung lesen) Zugriff an. Wenn der select korrekt ist und andere selects funktionieren, liegt es sicherlich daran. Vernünftigen Datenbankzugriff bekommst du nur über Drittanbieter, ich hatte zuerst ZEOS danach hatte ich mich für UniDAC entschieden.

Soviel ich weiß können XE4-Version-Besitzer auf die kostenlose FireDAC zugreifen, welche man sich glaube zuvor runterladen muss.

Uwe Raabe 24. Jun 2013 13:47

AW: DBX meldet Syntaxfehler wo keine sind
 
Probier es doch mit FireDAC.

Der schöne Günther 24. Jun 2013 14:07

AW: DBX meldet Syntaxfehler wo keine sind
 
Ich wollte eigentlich nichts weiter als eine lokale Konfiguration aus einem paar KB großen SQLite-File einlesen.

Muss ich mir jetzt wieder irgendwelche Enterprise-Lösungen herunterladen und installieren nur um ein halbes Dutzend Zeilen aus einer SQLite-DB zu lesen? :oops:

baumina 24. Jun 2013 14:12

AW: DBX meldet Syntaxfehler wo keine sind
 
Du kannst auch versuchen den select "einfacher" zu formulieren, daraus mehrere selects zu machen und die "Union"-Syntax programmtechnisch lösen.

jobo 24. Jun 2013 14:33

AW: DBX meldet Syntaxfehler wo keine sind
 
Bei einfachen Treibern oder Backend Engines hilft oft:
- Alias für Tables und Columns prüfen und konsistent einsetzen
(ich meine mich dunkel zu erinnern, dass es hier bei sqLite sogar ne besondere Besonderheit gab..)
- Bei Union mindestens im ersten SQL auf Spaltenalias bei "berechneten " Feldern achten
- ggF helfende, äußere Selects um die inneren, komplexen.

Spezialisierte Thirdparty Tools verhalten sich idR schlauer als stanard Komponenten. Ein fehlender oder kryptischer (weil aus der Feld-Oeration selbst gebildet~Spalte nennt sich dann wie die sie erzeugende Funktion) Feldalias kommt ggF. im Spezialtool harmlos rüber, ist aber nicht gut für DBX, ...

Tja und wichtig wäre ggF das Statement selbst hier zu posten.

Der schöne Günther 24. Jun 2013 14:41

AW: DBX meldet Syntaxfehler wo keine sind
 
Spalten mit bösen Namen sind ein guter Hinweis. :thumb:

Aber daran lag es nicht: Die Syntaxfehler habe ich in den Griff bekommen, er kam mit den Tab-Charakteren die noch im (formatierten) String gesteckt haben nicht zurecht. In der Exception wurden die nicht angezeigt. Das Problem liegt jetzt weiter eindeutig darin, dass er in der inneren Abfrage nichts von der äußeren weiß und hier mit Exception rausfliegt.

Mit FireDac habe ich jetzt ein paar Minuten probiert, bekomme es aber auf die Schnelle nicht hin. Eine Exe-Größe die dann auch auf 27MB anschwillt hat dabei auch einen gewissen Unterhaltungswert :-D
Insgesamt ist mir meine Zeit für so etwas auch zu schade, ich fummele es mir dann lieber über Applikationslogik zurecht.

Für benutzerdefinierte SQLite-Geschichten die unter XE4 noch funktionieren gehe ich euch dann wohl ein anderes mal auf den Senkel. Danke bis hierhin.

jobo 24. Jun 2013 14:44

AW: DBX meldet Syntaxfehler wo keine sind
 
Schnellgooglen ergab, das sqlite scheinbar zwingend SpaltenAlias bei brechneten Spalten braucht, aber die Info ist ohne Gewehr, HandinsFeuer usw. irgendwas war da jedenfalls...
Du machst es ja eh anders.


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:05 Uhr.
Seite 1 von 2  1 2      

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