Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Programm nur im Kompatibilitätsmodus Win98 ausführbar (https://www.delphipraxis.net/166828-programm-nur-im-kompatibilitaetsmodus-win98-ausfuehrbar.html)

roga 1. Mär 2012 17:49

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:
  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;
Eigenartig ist auch, dass die mobilen Versionen anstandslos laufen (Einstellungen und Daten werden in diesem Fall im Applicationspath gespeichert).

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

himitsu 1. Mär 2012 17:58

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;

roga 1. Mär 2012 18:11

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

himitsu 1. Mär 2012 18:31

AW: Programm nur im Kompatibilitätsmodus Win98 ausführbar
 
Dann wenigstens in eine Logdatei, aber ganz weg ist nicht unbedingt die ideal.
Siehe http://www.delphipraxis.net/166818-d...-ersetzen.html , also das zugrundeliegende Problem da, in meiner Beschreibung.

Es ging halt mehr darum, daß du uns diese Meldung verrätst. :zwinker:

roga 2. Mär 2012 07:21

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.

jaenicke 2. Mär 2012 07:41

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?

roga 2. Mär 2012 09:45

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 06:58 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