Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   SQLite Aliases funktionieren nicht (https://www.delphipraxis.net/175115-sqlite-aliases-funktionieren-nicht.html)

badspirit 31. Mai 2013 07:04

Datenbank: SQLite • Version: 3.7.15.2 • Zugriff über: dbExpress

SQLite Aliases funktionieren nicht
 
Hallo,
ich versuche seid einer halben Stunde verzweifelt, die Anzahl meiner Datensätze aus meiner Tabelle auszulesen. Ich benutze dbExpress für die Verbindung zu meiner SQLite Datenbank. Abragen funktionieren alle soweit, nur tauchen immer wieder Probleme bei Kleinigkeiten auf die ich mir nicht erklären kann. Deshalb möchte ich wissen ob Ihr damit auch schon Probleme gehabt habt.

Mein erster Gedenke war ein Query abzusetzen ('SELECT id FROM tabelle WHERE name LIKE :name') und anschließend mit
query.recordcount die Anzahl abzufragen. Dies funktioniert leider nicht, hier gibt es eine Exception "Operation wird nicht unterstützt"

Nachtrag: Ich habe grade mitbekommen, dass query.recordcount nur abgefragt werden kann wenn auch wirklich etwas gefunden wurde. (Problem hat sich also erledigt)

Meine zweite Idee dazu war: 'SELECT Count(id) AS Anzahl FROM tabelle WHERE name LIKE :name'.
Aber auch hier habe ich ein Problem und zwar kann ich nicht auf query.fielfbyname('Anzahl')zugreifen. Anscheinend wird der Alias nicht gesetzt, denn im Query ist nur ein Feld Namens "Column0" vorhanden. Ist das ganze ein Bug oder kann ich das irgendwie anders lösen?

jobo 31. Mai 2013 07:43

AW: SQLite Aliases funktionieren nicht
 
Als Workaround könnte Query.Fields[0] statt fieldbyname klappen.
Auf SQL Seite mal ohne "as" probieren.

Bernhard Geyer 31. Mai 2013 07:59

AW: SQLite Aliases funktionieren nicht
 
Da ein "Select count(*) ..." eh nur einen Datensatz mit einem Feld liefert reicht es hier mit "Fields[0]" zu arbeiten.

Und wenn die Alias nicht klappt könnte das sicherhlich an dbExpress liegen.
Nachdem Emba mit FireDac hier eh einen besseren Nachfolger am Start hat würde ich hier auch keine Fehlerkorrekturen mehr erwarten.

badspirit 31. Mai 2013 08:05

AW: SQLite Aliases funktionieren nicht
 
also so:
'SELECT Count(id) Anzahl FROM tabelle WHERE name LIKE :name'?

Da hab ich das selbe Problem.
Ich habe es jetzt halt mit query.FieldByName('Column0') gelöst. Wäre trotzdem interessant zu wissen wieso der Alias für das Feld nicht übernommen wird. Klappt ja nicht mal bei ganz normalen abfragen ('SELECT id AS id_test FROM tabelle').

Wenn ich die Abrage über SQLite Admin sende, bekomme ich übrigens die Datensätze mit dem entsprechenden Alias zurück;

Gehe da auch von nem Bug aus!

Bernhard Geyer 31. Mai 2013 08:15

AW: SQLite Aliases funktionieren nicht
 
Zitat:

Zitat von badspirit (Beitrag 1217059)
Ich habe es jetzt halt mit query.FieldByName('Column0') gelöst. Wäre trotzdem interessant zu wissen wieso der Alias für das Feld nicht übernommen wird.

Kuckst du hier: http://blogs.embarcadero.com/sblas/2...e3-and-sqlite/

Abschnitt nach "ColumnMetaDataSupported causes the driver code to miss the fullname (alias) of the field because"

jobo 31. Mai 2013 08:16

AW: SQLite Aliases funktionieren nicht
 
In Deiner Variante bekommst Du aber dann ein Problem, wenn es ein Bug ist und Du oder andere Anwender mit neueren Treibern arbeiten.
Versuch lieber die FieldIndex Variante, die ich vorgeschlagen hab.

badspirit 31. Mai 2013 08:19

AW: SQLite Aliases funktionieren nicht
 
Das hatte ich nicht bedacht. Dann werde ich das so tun.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14: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