Entwickler-Ecke

Datenbanken - Fehler bei Zugriff auf SQLite-Datenbank


Hänsel - Mi 05.05.21 12:44
Titel: Fehler bei Zugriff auf SQLite-Datenbank
Hallo, kann mir hier jemand weiterhelfen?

Ich arbeite mit der Datenbank "SQLite-Studio". Wenn ich nach dem hinzufügen von Datensätzen mit der Abfrage komme:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
DataModule_Tabellen.FDConnection1.Connected:=true;
DataModule_Tabellen.FDQuery_Einlesung.Close;
DataModule_Tabellen.FDQuery_Einlesung.SQL.Text:='Select * From Einlesung Where Feld1 order by Feld1 ';
DataModule_Tabellen.FDQuery_Einlesung.Open;
Satz:=DataModule_Tabellen.FDQuery_Einlesung.RecordCount;
Label1.Caption:=IntToStr(Satz);

bekomme ich das Ergebnis (Anzahl der Datensätze) angezeigt. Wenn keine Datensätze hinzugefügt werden, bekomme ich mit dieser Abfrage keine Rückmeldung von der Anzahl der Datensätze. Das gleiche gilt, wenn ich das Programm öffne um zu sehen wieviel Sätze sind vorhanden. Was habe ich da eventuell falsch gemacht? Bei Delphi habe ich die Version '10.1 Berlin'

Schon mal Danke im Voraus
Hänsel

Moderiert von user profile iconTh69: Titel geändert (war "SQLite-Studio").
Moderiert von user profile iconTh69: Delphi-Tags hinzugefügt


Th69 - Mi 05.05.21 14:07

Hallo,

deine Where-Anweisung ist falsch - du solltest eigentlich einen Datenbankfehler erhalten.

PS: Die Datenbank heißt nur "SQLite"!


Hänsel - Mi 05.05.21 15:19

Danke für die Antwort,
es funktioniert auch nicht ohne der "Where" Anweisung.
Der Name heißt doch "InstallSQLiteStudio-3.2.1"
vielleicht kann hier noch jemand Hinweise geben.

Danke
Hänsel


Th69 - Mi 05.05.21 15:57

Du meinst 'Select * From Einlesung order by Feld1'?
Dies sollte zumindestens syntaktisch in Ordnung sein.

Hast du die Anweisung denn mal direkt im SQLite-Studio ausgeführt?

PS: SQLite-Studio ist doch nur das Programm, mit dem du die SQLite-Datenbank bearbeiten kannst - von Delphi greifst du aber nur noch direkt auf die SQLite-Datenbank(datei) zu.


Hänsel - Mi 05.05.21 16:18

ja, nach dem Einlesen aller neuen Daten, können Select Anweisungen bzw. Abfragen durchgeführt werden und auch das Zählen der Datensätze funktioniert (aber nur nach dem Einlesen der Daten). Nur wenn ich das Programm öffne (und noch keine Daten eingelesen habe) kann die Anweisung zum zählen der Daten herausgeben werden, aber dabei passiert nichts.

Delphi-Quelltext
1:
Satz:=DataModule_Tabellen.FDQuery_Einlesung.RecordCount;                    


Hänsel

Moderiert von user profile iconTh69: Delphi-Tags hinzugefügt


Th69 - Mi 05.05.21 16:28

Wird überhaupt nichts im Label angezeigt oder 0?
Fängst du Exceptions in deinem Programm (und verwirfst diese)?
Ansonsten debugge doch mal Zeile für Zeile.


Hänsel - Mi 05.05.21 18:07

Ich denke zumindest den Fehler erkannt zuhaben. Es lag an der Einstellung der Komponente 'FDQuery1'. Hier muss nur die Anzahl der Datensätze geändert werden. Als Standard stehen dort 50 . Ich habe diese auf 100000 gesetzt und es funktionierte sofort.
Ich bedanke mich bei Euch für die Mithilfe.

Danke
Hänsel


Th69 - Do 06.05.21 09:10

Sehr eigenartig.


Sinspin - Do 06.05.21 12:37

Hallo,

wenn es dir an der Stelle nur darum ging die Anzahl der Datensätze zu ermitteln ist der Aufruf eh mehr als ungeeignet.
Da würde SELECT Count(*) AS C FROM Einlesung deutlich mehr sinn machen.

Für gewöhnlich ist ein DB Zugriff auf Vermeidung von unnötigen Zugriffen und Datentransfers ausgelegt.
Soweit RecordCount nicht als Funktion der Datenbank untersützt wird, liefert ein Aufruf bei den meißten DB Komponenten nur die Größe des geladenen Puffers zurück.
Es sei denn man hat nach dem Öffnen via query.Last dafür gesorgt das einmal alles übertragen wurde. Oder verwendet eh FetchAll und lädt das Ergebnis der kompletten Abfrage in den lokalen Speicher.