AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

SQLite3 locked

Ein Thema von matashen · begonnen am 31. Jul 2014 · letzter Beitrag vom 31. Jul 2014
Antwort Antwort
matashen

Registriert seit: 29. Jan 2007
Ort: daheim
460 Beiträge
 
Delphi XE2 Enterprise
 
#1

SQLite3 locked

  Alt 31. Jul 2014, 11:40
Datenbank: SQlite • Version: 3 • Zugriff über: dll
Hallo,

ich schreibe in einer Anwendung die Daten mit SQlite.dll in eine Datenbankdatei.
Das Projekt ist schon etwas älter und wurde ursprünglich mit Delphi4 geschrieben und sqlite war die Version2.

Jetzt hab ich das Projekt umbauen müssen und dabei gleich mal die sqlite3.dll mit rein (wenns schon neueres gibt dann warum nicht)

Jetzt bekomm ich bei jedem Schreibzugriff auf die Datenbank aber eine Fehlermeldung(siehe angehängtes Bild).

wie behebe ich das?

Codeschnipsel:
Delphi-Quellcode:
 //Daten updaten
        sldb.BeginTransaction;
        sSQL:='UPDATE artikel SET ';
        sSQL:=sSQL+'tapeid="'+begurt.text+'"';
        sSQL:=sSQL+',beinfo="'+betext.text+'"';
        sSQL:=sSQL+',lort="'+belager.text+'"';
        sSQL:=sSQL+',notes="'+beinfotext.text+'"';
        sSQL:=sSQL+' WHERE sap="'+besap.text+'"';
        sldb.ExecSQL(sSQL);
        sldb.Commit;
ich habs dann auch versucht mit
sldb.execsql('BEGIN EXCLUSIVE TRANSACTION');
hat aber auch nichts gebracht.

Gruß Matthias
Miniaturansicht angehängter Grafiken
fehler.png  
Matthias
Das Leben ist eines der härtesten.
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#2

AW: SQLite3 locked

  Alt 31. Jul 2014, 11:46
Sicher dass es an der anderen DLL liegt? Nicht dass du noch mit irgendeinem anderen Programm wie SQLite Expert die DB offen hast? Oder dem "Daten-Explorer" des RAD Studio? So hungrig wie das RAD Studio nach Filehandles ist (und sie nie freigibt)...
  Mit Zitat antworten Zitat
matashen

Registriert seit: 29. Jan 2007
Ort: daheim
460 Beiträge
 
Delphi XE2 Enterprise
 
#3

AW: SQLite3 locked

  Alt 31. Jul 2014, 11:48
Nein, ich hab sie nur einmal offen, greif mit nix anderem drauf zu
Matthias
Das Leben ist eines der härtesten.
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.755 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: SQLite3 locked

  Alt 31. Jul 2014, 12:22
.. wo liegt denn die Datenbank?
Ist da das Schreiben erlaubt?

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
mse1

Registriert seit: 21. Nov 2007
115 Beiträge
 
#5

AW: SQLite3 locked

  Alt 31. Jul 2014, 12:37
Auch ein nicht abgeschlossener Lesevorgang locked Sqlite3.
Martin Schreiber
  Mit Zitat antworten Zitat
matashen

Registriert seit: 29. Jan 2007
Ort: daheim
460 Beiträge
 
Delphi XE2 Enterprise
 
#6

AW: SQLite3 locked

  Alt 31. Jul 2014, 13:16
Die Datei selbst liegt auf einem Netzlaufwerk mit Schreibrechten, hat ja auch mit der sqlite2 funktioniert.

Zitat:
Auch ein nicht abgeschlossener Lesevorgang locked Sqlite3.
und wie geb ich die wieder frei?
Matthias
Das Leben ist eines der härtesten.
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#7

AW: SQLite3 locked

  Alt 31. Jul 2014, 13:27
Die Datei selbst liegt auf einem Netzlaufwerk mit Schreibrechten, hat ja auch mit der sqlite2 funktioniert.
Uh.
http://www.sqlite.org/faq.html#q5:
Zitat:
But use caution: this locking mechanism might not work correctly if the database file is kept on an NFS filesystem. This is because fcntl() file locking is broken on many NFS implementations. You should avoid putting SQLite database files on NFS if multiple processes might try to access the file at the same time.
Und später:
Zitat:
When SQLite tries to access a file that is locked by another process, the default behavior is to return SQLITE_BUSY. You can adjust this behavior from C code using the sqlite3_busy_handler() or sqlite3_busy_timeout() API functions.


Auch: Ich verstehe das "Zugriff über: dll" nicht. Gehst du nun direkt über die dll oder (der Quellcode sieht eher danach aus) eine Zwischenschicht wie dbExpress oder FireDAC?
  Mit Zitat antworten Zitat
mse1

Registriert seit: 21. Nov 2007
115 Beiträge
 
#8

AW: SQLite3 locked

  Alt 31. Jul 2014, 13:46
Zitat:
Auch ein nicht abgeschlossener Lesevorgang locked Sqlite3.
und wie geb ich die wieder frei?
Den Lesevorgang abschliessen oder abbrechen. Wie greifst du auf die Sqlite3 API zu?
Martin Schreiber
  Mit Zitat antworten Zitat
matashen

Registriert seit: 29. Jan 2007
Ort: daheim
460 Beiträge
 
Delphi XE2 Enterprise
 
#9

AW: SQLite3 locked

  Alt 31. Jul 2014, 14:02
Zitat:
Auch ein nicht abgeschlossener Lesevorgang locked Sqlite3.
und wie geb ich die wieder frei?
Den Lesevorgang abschliessen oder abbrechen. Wie greifst du auf die Sqlite3 API zu?
ich geh direkt über die dll mit einer wraper class (unit)
Ich verwende kein dbExpress und kein FireDAC
Bei dbExpress ist die Unterstützung für sqlite meines Wissens erst ab XE3 drin und ich hab lediglich die XE2
Wenn man da die Unterstützung von sqlite durch dbexpress nachinstallieren kann wär das auch nicht schlecht.

Der Code zum lesen - nur relevanter Teil
Delphi-Quellcode:
if FileExists(slDBPath) then begin
    //Daten in Datenbank schreiben
    try
    sldb := TSQLiteDatabase.Create(slDBPath);
    try
       sltb := slDb.GetTable('SELECT * FROM tape WHERE [firstID]........
...........
finally
sltb.free;
end;
finally
sldb.free;
end;
Matthias
Das Leben ist eines der härtesten.
  Mit Zitat antworten Zitat
matashen

Registriert seit: 29. Jan 2007
Ort: daheim
460 Beiträge
 
Delphi XE2 Enterprise
 
#10

AW: SQLite3 locked - gelöst

  Alt 31. Jul 2014, 14:34
Auch ein nicht abgeschlossener Lesevorgang locked Sqlite3.
Der Hinweis war wichtig, das war mir nicht klar. Bin dann ins grübeln gekommen.

Ich hab jetzt den Codeteil gefunden wo ich zwar die Datenbank wieder frei gegeben habe, aber nicht vorher die Tabelle, und damit bleibts locked. Dies war in einem Codeteil der mit dem wo der Fehler auftritt nichts zu tun hat, aber bei bestimmten Aktionen auch Daten abgerufen werden.

Danke euch allen.

Gruß Matthias
Matthias
Das Leben ist eines der härtesten.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:38 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