sqlite
-
- Beiträge: 205
- Registriert: So 2. Dez 2007, 20:47
- OS, Lazarus, FPC: Windows XP Lazarus immer neueste Version
- CPU-Target: xxBit
- Wohnort: Schweiz
sqlite
Mit was soll ich sqlite verbinden, mit zeos oder den Komponenten von Lazarus. Hat da jemand Erfahrung.
Peter
Peter
-
- Beiträge: 55
- Registriert: Do 6. Nov 2008, 14:16
- OS, Lazarus, FPC: Windows Vista (L 1.0.6 FPC 2.6.0)
- CPU-Target: Intel 32 Bit/Arm
Re: sqlite
Solange es sich um eine Desktop-Applikation handelt, würde ich die ZEOS-Komponenten nehmen. Das Handling dieser Komponenten ist besser als das der Lazarus-Komponenten.Kuster Peter hat geschrieben:Mit was soll ich sqlite verbinden, mit zeos oder den Komponenten von Lazarus.
Wenn du allerdings mit dem Gedanken spielst, deine Applikation mal auf WINCE laufen zu lassen, kommst du um die Lazarus-Komponenten nicht herum - ZEOS gibt's (noch?) nicht für Laz/WINCE.
HTH, der Poelser
-
- Beiträge: 6079
- Registriert: Do 21. Sep 2006, 07:51
- OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
- CPU-Target: AVR,ARM,x86(-64)
- Wohnort: Dessau
- Kontaktdaten:
Re: sqlite
Das mit WinCE funktioniert auch mit sqldb nicht. Ich würde dir auf jeden Fall zu ZeOS raten.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/
-
- Beiträge: 55
- Registriert: Do 6. Nov 2008, 14:16
- OS, Lazarus, FPC: Windows Vista (L 1.0.6 FPC 2.6.0)
- CPU-Target: Intel 32 Bit/Arm
Re: sqlite
Nö, funktioniert. An einigen Stellen etwas hakelig zu programmieren, aber läuft.Christian hat geschrieben:Das mit WinCE funktioniert auch mit sqldb nicht.
Natürlich braucht's dazu eine für WINCE compilierte sqlite3.dll, die findet man aber im Netz.
-
- Beiträge: 6079
- Registriert: Do 21. Sep 2006, 07:51
- OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
- CPU-Target: AVR,ARM,x86(-64)
- Wohnort: Dessau
- Kontaktdaten:
Re: sqlite
mit den sqlite Komponenten oder sqldb ?? Das wär mir neu hab schon öfter von problemen diesbezüglich gelesen.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/
-
- Beiträge: 55
- Registriert: Do 6. Nov 2008, 14:16
- OS, Lazarus, FPC: Windows Vista (L 1.0.6 FPC 2.6.0)
- CPU-Target: Intel 32 Bit/Arm
Re: sqlite
Also, ich benutze von der Registerkarte SQLdb:
TSQLite3Connection, TSQLQuery, TSQLTransaction
Datenbanksensitive Komponenten benutze ich nicht, Daten holen und speichern nur über die SQLQuery. Was hakelig ist, ist immer wieder das Starten und Beenden von Transactions, besonders unübersichtlich ist es dann, wenn in einer Schleife über eine Query zwischendrin Datensätze geschrieben werden müssen. Oder dieser hier:
Es gibt noch ein paar Stolpersteine mehr. Anfangs wär ich bald durchgedreht, gerade weil die Fehlermeldungen total unsinnig oder unverständlich waren. Das Transaction-Gehampel bekommt man damit aber ziemlich zuverlässig in den Griff: Eine Connection nur zum Lesen von Daten benutzen, eine zweite nur zum Schreiben von Daten.
TSQLite3Connection, TSQLQuery, TSQLTransaction
Datenbanksensitive Komponenten benutze ich nicht, Daten holen und speichern nur über die SQLQuery. Was hakelig ist, ist immer wieder das Starten und Beenden von Transactions, besonders unübersichtlich ist es dann, wenn in einer Schleife über eine Query zwischendrin Datensätze geschrieben werden müssen. Oder dieser hier:
Code: Alles auswählen
if Query.Active then Query.Close;
Query.SQL.Text := 'HIER EIN STATEMENT AUF TABLEXYZ';
Query.Open;
Query.First;
...
Query.Close;
...
DM.con1.Transaction.Active:=False; <- Und das nervt gewaltig! Vergisst man das, kann man die merkwürdigsten Fehlermeldungen bekommen...
tmps := 'INSERT INTO TABLEXYZ';
DM.con1.ExecuteDirect(tmps);
DM.con1.Transaction.Commit;
-
- Beiträge: 2013
- Registriert: Do 16. Okt 2008, 10:22
- OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
- CPU-Target: x86,x64,ARM
Re: sqlite
SQLite3 Transaktionen sind etwas speziell, da sie mit file locks arbeiten. tmsesqlite3connection (MSEgui) hat daher ein spezielles flag (options slo_transactions, standardmässig aus) für die Aktivierung von Transaktionen. Ebenfalls wissen muss man, dass ein nicht abgeschlossener Lesevorgang (TSQLQuery.PacketRecords <> -1, nicht alle Datensätze geladen) die DB für Schreibvorgänge sperrt.Poelser hat geschrieben:Das Transaction-Gehampel bekommt man damit aber ziemlich zuverlässig in den Griff: Eine Connection nur zum Lesen von Daten benutzen, eine zweite nur zum Schreiben von Daten.
Martin
-
- Lazarusforum e. V.
- Beiträge: 3177
- Registriert: Di 22. Jul 2008, 19:27
- OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
- CPU-Target: 32bit x86 armhf
- Wohnort: Köln
- Kontaktdaten:
Re: sqlite
Ich arbeite halbwegs (d.h. immer wenn ich Lust darauf habe) erfolgreich mit den Lazarus-Komponenten, wobei ich die Probleme, die Poelser hatte, nicht gehabt habe.
MfG Socke
Code: Alles auswählen
{ Benötigt wird je eine TSqlite3Connection, TSqlQuery und TSqlTransaction }
DbConnection.Open; // muss man nur einmal (beim ersten Zugriff auf die DB) machen
if DbConnection.Connected then begin
with DbQuery do begin
SQL.Text := 'SQL-STMT ohne RESULT-SET';
ExecSQL;
end;
DbTransaction.Commit; // immer, wenn Änderungen in der DB gespeichert werden sollen
// oder auch
with DbQuery do begin
SQL.Text := 'SELECT something FROM somewhere';
Open; // nur bei einer query mit result set
First;
while not EOF do begin
writeln(Fields[0].AsString);
end;
end;
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
-
- Beiträge: 55
- Registriert: Do 6. Nov 2008, 14:16
- OS, Lazarus, FPC: Windows Vista (L 1.0.6 FPC 2.6.0)
- CPU-Target: Intel 32 Bit/Arm
Re: sqlite
Hast du verschachtelte Queries, in denen auch noch Daten geschrieben werden? Da tauchen die Probleme immer auf. Wie mse geschrieben hat, scheint das Problem auf filelocks zu basieren. Wenn die ganze DB statt einer Tabelle gelockt wird, wird's bei Verschachtelungen natürlich problematisch.
-
- Lazarusforum e. V.
- Beiträge: 3177
- Registriert: Di 22. Jul 2008, 19:27
- OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
- CPU-Target: 32bit x86 armhf
- Wohnort: Köln
- Kontaktdaten:
Re: sqlite
Bisher noch nicht, aber meine Programme sind bisher recht einfach gehalten, sodass solche Situationen durch entsprechendes Design verhindert werden können (ist natürlich etwas ganz anderes bei Multithreading).Poelser hat geschrieben:Hast du verschachtelte Queries, in denen auch noch Daten geschrieben werden? Da tauchen die Probleme immer auf. Wie mse geschrieben hat, scheint das Problem auf filelocks zu basieren. Wenn die ganze DB statt einer Tabelle gelockt wird, wird's bei Verschachtelungen natürlich problematisch.
So wie ich die Komponenten angeschaut habe, müsste sich das Verhalten (ganze DB/nur Tabelle locken) steuern können lassen (wobei ich durch die eher gering ausfallende Dokumentation mich auch noch nicht so massiv damit beschäftigt habe).
MfG Socke
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
-
- Beiträge: 6079
- Registriert: Do 21. Sep 2006, 07:51
- OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
- CPU-Target: AVR,ARM,x86(-64)
- Wohnort: Dessau
- Kontaktdaten:
Re: sqlite
Du kannst bei sqlite keine einzelne tabelle locken. sobald geschrieben wird ist die gesamte datenbank gelockt.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/