![]() |
Datenbank: SQLite • Version: 3 • Zugriff über: Wrapper
Programm nur im Kompatibilitätsmodus Win98 ausführbar
Hallo,
hoffentlich könnt ihr mir bei der Lösung eines großen Problems weiterhelfen! Ich habe verschiedene Anwendungen unter Windows 7 32-Bit entwickelt, die mit SQLite 3 arbeiten. Bei mir läuft natürlich alles Prima und auch die meisten Nutzer haben keinerlei Probleme und sind glücklich. Aber bei einigen Anwendern läufts nur im Kompatibilitätsmodus Windows 98. Administratorrechte und Benutzerverzeichnisse konnte ich mittlerweile als Ursachen ausschließen. Der Fehler tritt im Create des Hauptformulars beim Erstellen der Datenbank auf. Die Benutzerverzeichnisse werden vorher ordnungsgemäß angelegt.
Delphi-Quellcode:
Eigenartig ist auch, dass die mobilen Versionen anstandslos laufen (Einstellungen und Daten werden in diesem Fall im Applicationspath gespeichert).
DBName := PersonalPath + DBFile;
try SQLiteDB := TSQLiteDatabase.Create(DBName); except MessageDlgS('Fehler beim Öffnen der Datenbank! Das Programm wird beendet.', mtError, DS_ERROR, [mbOK], 0); Halt; end; Meine Vermutung ist, das es evtl. an der benutzten Datenbankengine SQLite oder vielleicht auch am Wrapper liegen könnte. Gibt es hier irgendwelche Informationen zu entsprechenden Bugs o.ä. Für eure Hilfe wäre ich wirklich dankbar, denn der Kompatibilitätsmodus ist kein Ausweg und deklariert die neue Programmentwicklung zur uralten Schote! liebe Grüße roga |
AW: Programm nur im Kompatibilitätsmodus Win98 ausführbar
Wie lautet sich denn die "richtige" Fehlermeldung?
Und mit welchem Delphi wird denn gerbeitet? :stupid: z.B.
Delphi-Quellcode:
try
SQLiteDB := TSQLiteDatabase.Create(DBName); except on E: Exception do begin MessageDlgS('Fehler beim Öffnen der Datenbank! Das Programm wird beendet.' + sLineBreak + DBName + sLineBreak + E.ClassName + ':' + E.Message, mtError, DS_ERROR, [mbOK], 0); Halt; end; end; |
AW: Programm nur im Kompatibilitätsmodus Win98 ausführbar
Hallo himitsu,
vielen Dank für Deine Reaktion! Die richtige Fehlermeldung wollte ich den Nutzern nicht zumuten und ich selbst kann hier den Fehler nicht reproduzieren. Es hat sich jedoch jemand, bei dem der Fehler auftritt, bereit erklärt, bei der Lösung mitzuwirken (auch als "Tester") - und dafür bin ich natürlich dankbar. Ich werde ihm gleich eine Testversion schicken, die ich mit Deiner Exception ausstatte und das Resultat hier veröffentlichen. bis dann roga |
AW: Programm nur im Kompatibilitätsmodus Win98 ausführbar
Dann wenigstens in eine Logdatei, aber ganz weg ist nicht unbedingt die ideal.
Siehe ![]() Es ging halt mehr darum, daß du uns diese Meldung verrätst. :zwinker: |
AW: Programm nur im Kompatibilitätsmodus Win98 ausführbar
Diese Fehlermeldung hilft mir jetzt auch nicht weiter, denn die sagt ja im Prinzip das gleiche wie die bisherige, dass die Datenbank nicht geöffnet werden konnte:
ESQLiteException:Failed to open database "C:\Users\...\Documents\...\daten.dbs" : unable to open database file Der Pfad ist auch vorhanden. |
AW: Programm nur im Kompatibilitätsmodus Win98 ausführbar
Kann es sein, dass SQLite etwas im Ordner der Anwendung machen will? Temporäre Dateien oder so?
Arbeitest du in deinen Tests mit einer Standardkonfiguration von Windows 7? Was da passiert sollte sich mit einem Log des Process Monitors herausfinden lassen. Ein "normaler" Benutzer wird den allerdings kaum bedienen können. Aber vielleicht lässt er dich ja kurz über TeamViewer auf den PC? |
AW: Programm nur im Kompatibilitätsmodus Win98 ausführbar
Danke Sebastian für den Tipp, aber es lag wirklich am verwendeten Wrapper. Jetzt läuft alles wie gewünscht und ich bin happy!
Folgende Änderungen an genannten Dateien führten zum Erfolg:
Delphi-Quellcode:
// SQLite3.pas -----------------------
function SQLite3_Open(filename: PUTF8String; var db: TSqliteDB): integer; cdecl; external SQLiteDLL name 'sqlite3_open'; // SQLiteTable3.pas ------------------ constructor TSQLiteDatabase.Create(const FileName: string); var Msg: PAnsiChar; iResult: integer; // utf8FileName: UTF8string; begin inherited Create; fParams := TList.Create; self.fInTrans := False; Msg := nil; try // utf8FileName := UTF8String(FileName); // iResult := SQLite3_Open(PAnsiChar(utf8FileName), Fdb); iResult := SQLite3_Open(PUTF8String(AnsiToUtf8(FileName)), Fdb); if iResult <> SQLITE_OK then if Assigned(Fdb) then begin Msg := Sqlite3_ErrMsg(Fdb); raise ESqliteException.CreateFmt('Failed to open database "%s" : %s', [FileName, Msg]); end else raise ESqliteException.CreateFmt('Failed to open database "%s" : unknown error', [FileName]); finally if Assigned(Msg) then SQLite3_Free(Msg); end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:55 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