AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Programm nur im Kompatibilitätsmodus Win98 ausführbar
Thema durchsuchen
Ansicht
Themen-Optionen

Programm nur im Kompatibilitätsmodus Win98 ausführbar

Ein Thema von roga · begonnen am 1. Mär 2012 · letzter Beitrag vom 2. Mär 2012
Antwort Antwort
Benutzerbild von roga
roga

Registriert seit: 15. Jun 2008
Ort: Sachsen-Anhalt
109 Beiträge
 
Delphi XE8 Professional
 
#1

Programm nur im Kompatibilitätsmodus Win98 ausführbar

  Alt 1. Mär 2012, 18:49
Datenbank: SQLite • Version: 3 • Zugriff über: Wrapper
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
Ronald
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#2

AW: Programm nur im Kompatibilitätsmodus Win98 ausführbar

  Alt 1. Mär 2012, 18:58
Wie lautet sich denn die "richtige" Fehlermeldung?
Und mit welchem Delphi wird denn gerbeitet?

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;
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von roga
roga

Registriert seit: 15. Jun 2008
Ort: Sachsen-Anhalt
109 Beiträge
 
Delphi XE8 Professional
 
#3

AW: Programm nur im Kompatibilitätsmodus Win98 ausführbar

  Alt 1. Mär 2012, 19:11
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
Ronald
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#4

AW: Programm nur im Kompatibilitätsmodus Win98 ausführbar

  Alt 1. Mär 2012, 19:31
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.
$2B or not $2B

Geändert von himitsu ( 1. Mär 2012 um 19:34 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von roga
roga

Registriert seit: 15. Jun 2008
Ort: Sachsen-Anhalt
109 Beiträge
 
Delphi XE8 Professional
 
#5

AW: Programm nur im Kompatibilitätsmodus Win98 ausführbar

  Alt 2. Mär 2012, 08:21
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.
Ronald
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.648 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Programm nur im Kompatibilitätsmodus Win98 ausführbar

  Alt 2. Mär 2012, 08:41
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?
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von roga
roga

Registriert seit: 15. Jun 2008
Ort: Sachsen-Anhalt
109 Beiträge
 
Delphi XE8 Professional
 
#7

AW: Programm nur im Kompatibilitätsmodus Win98 ausführbar

  Alt 2. Mär 2012, 10:45
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;
Ronald
  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 04:42 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