Entwickler-Ecke

Datenbanken - SQLite Datenbank


Hänsel - Fr 16.10.20 20:43
Titel: SQLite Datenbank
Hallo
kann mir hier jemand weiter helfen.
Ich habe eine SQLite Datenbank angelegt sowie auch eine Tabelle dazu. Als Komponente habe ich die FireDAC Komponente (FDConnection sowie FDQuery). Die Verbindung zur Datenbank und zur Tabelle war in Ordnung. Um Daten Sätze hinzu zufügen habe ich folgendes gemacht:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
begin
    FDConnection1.Connected:=true;
    FDQuery1.Open;
    FDQuery1.Append;
    FDQuery1.Edit;
    zei:=StringListDatei[izeile];
    FDQuery1['Field1']:=22;
    FDQuery1['Field2']:=33;
    FDQuery1.Edit;
    FDQuery1.Post;
end;

Beim Programmstart kommt folgende Fehlermeldung:

Quelltext
1:
[FireDAC][Phys][SQLite]ERROR:database is locked.                    

Was habe ich hier vergessen bzw. falschgemacht? Ich babe zuvor mit ADO Komponenten gearbeitet, da funktionierte meine Vorgehensweise.

Hänsel

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


Th69 - Sa 17.10.20 10:35

Bei der Internet-Suche nach "[FireDAC][Phys][SQLite]ERROR:database is locked" kommen einige Links, u.a. Delphi Xe5 firedac Database locked error with SQLite database [https://stackoverflow.com/questions/22974832/delphi-xe5-firedac-database-locked-error-with-sqlite-database], d.h. probiere mal

Delphi-Quelltext
1:
2:
connection.Params.Add('SharedCache=False');
connection.Params.Add('LockingMode=Normal');

(bzw. bei dir dann FDConnection1)


Hänsel - Sa 17.10.20 16:32

Danke für den Hinweis. Aber die Fehlermeldung kommt nach wie vor.
Vielleicht kann noch jemand einen Hinweis geben wie ich mit einer SQLite umgehen kann. Um dort Daten einspielen zu können.

Hänsel


Th69 - So 18.10.20 08:32

Hast du FDConnection1 über den Designer als Komponente hinzugefügt?

Kann es sein, daß die Verbindung automatisch schon geöffnet wird (also Connected schon gesetzt ist)?


Sinspin - Mo 19.10.20 15:44

user profile iconHänsel hat folgendes geschrieben Zum zitierten Posting springen:
Hallo...

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
begin
    FDConnection1.Connected:=true;
    FDQuery1.Open;
    FDQuery1.Append;
    FDQuery1.Edit;
    zei:=StringListDatei[izeile];
    FDQuery1['Field1']:=22;
    FDQuery1['Field2']:=33;
    FDQuery1.Edit;
    FDQuery1.Post;
end;


Sorry dass ich das so sagen muss, aber der Code ist der Hammer!
Vieleicht kommt der Fehler auch erst an einer der viel zu vielen Quelltextzeilen.

Zudem, verbindest Du überhaupt die Connection mit der Query?
Irgendwas wie FDQuery1.Connection := FDConnection1; gibt es? Oder im Designer?

Das reicht wenn die Connection schon gebunden ist:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
begin
    FDConnection1.Connected:=true;
    FDQuery1.Open;
    FDQuery1.Append; // Append: neue zeile; Edit macht nur Sinn wenn du vorher einen Datensatz ausgewählt hast. 
//    FDQuery1.Edit; // Beides zusammen mach dagegen keinen Sinn.
//    zei:=StringListDatei[izeile];
    FDQuery1['Field1']:=22;
    FDQuery1['Field2']:=33;
//    FDQuery1.Edit; // na, wohl eher auch nicht sinnvoll hier. Je nach DB knallt es hier wenn man nochmal versucht Editmode zu setzen.
    FDQuery1.Post;
end;


Hänsel - Mo 19.10.20 19:15

Hallo,
ich habe einige Sachen ausprobiert und festgestellt, dass ich über Connection-Komponente schon die Datenbank geöffnet habe. Während des Programmablaufes habe ich nochmals versucht (siehe Quelltext)die Datenbank zu öffnen. Daraus hat sich der Fehler ergeben. Dies kenne ich mit ADO Komponenten nicht.
Für die Hinweise besten Dank.

Hänsel