![]() |
Datenbank: SQLite • Version: 3 • Zugriff über: TSQLConnection
Delphi XE6 und SQLite
Hallo,
bin noch ziemlich neu in Delphi und habe noch einige Schwierigkeiten mit Sachen die vielleicht für andere ganz einfach erscheinen. Zur Zeit versuche ich eine SQLite Datenbank zu erstellen (klappt), Daten einzutragen (klappt) und die Daten auszulesen (klappt nicht). In einem anderen Delphi-Forum habe ich ein kleines Tutorial über den Umgang mit SQLite gefunden. Das Tutorial ist für XE3, da nicht alles funktioniert wie beschrieben vermute ich dass es da doch ein paar kleine Unterschiede zwischen XE3 und XE6 gibt. Die vielen Versionen der Entwicklungsumgebung sind generell ein kleines Problem. Embarcadero wirft meiner Meinung nach viel zu oft neue Versionen auf den Markt. Natürlich benutze ich auch die Delphi-Hilfe und Google in der Hoffnung irgendwo auf einen nützlichen Hinweis zu finden.. Hier ein kurzer Quellcode der mir nun schon ein paar Tage Kopfzerbrechen bereitet:
Delphi-Quellcode:
Läuft übrigens fehlerfrei durch, nur dass keine Daten aus der Datenbank gelesen werden stört ungeheuerlich ;-)
Var
SQLBefehl, Rg:String; DatenSatz:TDataSet; N: Integer; begin Try SQLConnection.Connected:=False; SQLConnection.Params.Values['Database']:='C:\CD-Copy\SQLite.db'; SQLCOnnection.Params.Values['FailIfMissing']:='False'; SQLConnection.Connected:=True; SQLBefehl:='CREATE TABLE Fahrzeuge (MeinID INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, Marke VARCHAR(100), Modell VARCHAR(100));'; SQLConnection.ExecuteDirect(SQLBefehl); SQLBefehl:='INSERT INTO Fahrzeuge (MeinID, Marke, Modell) VALUES (NULL, "Fiat", "Punto");'; SQLConnection.ExecuteDirect(SQLBefehl); SQLBefehl:='SELECT * FROM Fahrzeuge;'; SQLConnection.Execute(SQLBefehl,NIL, DatenSatz); DatenSatz.First; while NOT Datensatz.Bof do Begin Rg:=''; for N := 0 to DatenSatz.FieldCount-1 do Rg:=Rg+' '+DatenSatz.Fields[N].AsString; ShowMessage(Rg); DatenSatz.Next; End; Except On E: EDataBaseError Do Showmessage(E.Message); End; Bin für alle Tipps welche mir helfen könnten eine Messagebox mit Inhalten aus der Datenbank zu erzeugen dankbar :wink: |
AW: Delphi XE6 und SQLite
.. sollte das nicht eof heißen?
Delphi-Quellcode:
oder
while NOT Datensatz.eof{Bof} do
Begin Rg:=''; for N := 0 to DatenSatz.FieldCount-1 do Rg:=Rg+' '+DatenSatz.Fields[N].AsString; ShowMessage(Rg); DatenSatz.Next; End;
Delphi-Quellcode:
Grüße
repeat
Rg:=''; for N := 0 to DatenSatz.FieldCount-1 do Rg:=Rg+' '+DatenSatz.Fields[N].AsString; ShowMessage(Rg); DatenSatz.Next; until Datensatz.eof Klaus |
AW: Delphi XE6 und SQLite
Und wie schon erwähnt, kannst du das
Delphi-Quellcode:
ersatzlos streichen.
try except
Wenn eine Exception auftritt wird von ganz alleine (macht
Delphi-Quellcode:
) eine MessageBox mit der Exception angezeigt. Weniger machen und mehr bekommen.
TApplication
|
AW: Delphi XE6 und SQLite
Der erste Tipp hat mich über einen Umweg auf die Lösung für das Problem gebracht.
Im Unterschied zu dem uralten VB6 steht der Datensatzzeiger in Delphi Anwendungen auch bei SQL Abfragen welche Daten enthalten erstmal immer auf BOF, in VB6 jedoch auf dem ersten Datensatz welcher Daten enthält Wie gewohnt habe ich zur Überprüfung ob Daten vorhanden sind abgefragt ob BOF = True ist. Funktioniert in Delphi nicht so wie erwartet. Nun frage ich EOF ab und alles läuft. Wenn eine SQL Abfrage keine Datensätze liefert dann sind ja BOF und EOF True. Die Try .. except finde ich hilfreich. Was mache ich da falsch? Wie bereits gesagt bin ich in der Delphi Umgebung noch blutiger Anfänger... |
AW: Delphi XE6 und SQLite
Zitat:
|
AW: Delphi XE6 und SQLite
Zitat:
Kann ich mit XE7 so nicht nachvollziehen und wäre dann ein Bug in XE6. Aber der richtige Ort um dort helfend einzugreifen ist
Delphi-Quellcode:
. Dort kannst du deine ungefangenen Exceptions behandeln wie du möchtest.
TApplication.OnException
Anzeigen, Loggen, ... |
AW: Delphi XE6 und SQLite
Ein Try-Except-Skelett sehe ich auch immer wieder. Es schadet nichts und sagt aus, SOLANGE DER EXCEPT-TEIL NICHT LEER IST. Er besagt ja, das man eine Fehlerbehandlung noch einbauen möchte. Hier wäre ein TODO allerdings angebracht.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:33 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 by Thomas Breitkreuz