SqLite - locked ? kann man das feststellen

Alles rund um die Programmierung mit Qt
Antworten
Espresso
Beiträge: 49
Registriert: 10. September 2009 13:55

SqLite - locked ? kann man das feststellen

Beitrag von Espresso »

Hallo,

ich suche etwas in der Art: QSqlDatabase.isDatabaseLocked
habe leider in der Doku nix gefunden.

wir verwenden eine SqLite3 Datenbank, auf die mehrere Prozesse schreiben.
kann man eigentlich feststellen, ob die DB gelockt ist?
Es gibt ab und zu Probleme, bei denen eine sonst gute Funktion plötzlich beim speichern hängen bleibt.
der query.exec() kommt dann nur über TimeOut zurück.

Ich würde gerne vorher testen, ob die db gelockt ist, und dann eine entsprechende Meldung an den Benutzer ausgeben.

Gruß Tom
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Re: SqLite - locked ? kann man das feststellen

Beitrag von Christian81 »

Ich wüsste nicht, dass es mit Qt-Mitteln geht. Eine richtige Datenbank hat dieses Problem ja nicht - ist einzig ein Problem von SQLite.
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
odt
Beiträge: 128
Registriert: 12. August 2010 11:49
Kontaktdaten:

Re: SqLite - locked ? kann man das feststellen

Beitrag von odt »

Mit QtLockedFile aus den Qt-Solutions kannst Du diese Funktionalität selber bauen. Ich glaube das git ist auf https://qt.gitorious.org/qt-solutions, doc auf http://doc.qt.digia.com/solutions/4/qtl ... index.html.

Code: Alles auswählen

		QtLockedFile* _lockFile;

			_lockFile = new QtLockedFile( _path + "/workspace.lock" );
			if( !_lockFile->open( QFile::ReadWrite ) ){
				throw Exception( "Das Lock-File vom Workspace konnte nicht geoeffnet werden." );
			}
			if( !_lockFile->lock( QtLockedFile::WriteLock, false ) ){
				throw Exception( tr( "Der Arbeitsbereich ist gesperrt. " ) + ApplicationData::Name + tr( " läuft evt bereits im Hintergrund." ) );
			}

		if( _lockFile != null ){
			if( !_lockFile->unlock() ){
				qDebug() << "failed to unlock redo.lock.file";
			}
			delete _lockFile;
			_lockFile = null;
		}
ODT Informatik GmbH, Reto Tschofenig
Espresso
Beiträge: 49
Registriert: 10. September 2009 13:55

Re: SqLite - locked ? kann man das feststellen

Beitrag von Espresso »

Danke für die Antworten,
das db-file selber locken ist aus meiner Sicht nicht hilfreich, lesend dürfen ja die anderen Threads zugreifen.
Das sollte aus der SQL Klasse das am besten selbst ermittelt werden können, in welchem Zustand sie sich befindent.

Gruß Tom
Antworten