Einzelnen Beitrag anzeigen

Benutzerbild von user0815
user0815

Registriert seit: 5. Okt 2007
331 Beiträge
 
Delphi XE2 Professional
 
#1

Firebird embedded DB austauschen

  Alt 4. Jan 2013, 09:38
Datenbank: Firebird • Version: 2.5.1 • Zugriff über: UniDAC
Ich installiere mein Programm per "Inno Setup".
In das Anwendungsverzeichnis kommen alle dll´s usw. die firebird embedded benötigt. Die gbak.exe packe ich auch in das Anwendungsverzeichnis.

Unter Inno stelle ich folgendes ein:

Code:
[Files]
Source: "D:\xxx\db.fdb"; DestDir: "{app}"; Flags: ignoreversion confirmoverwrite; Permissions: authusers-modify;
Für eine Datensicherung rufe ich die gbak.exe wie folgt auf:

Delphi-Quellcode:
var
  Quelle, Ziel, Parameter : String;

Ziel := ' "' + SaveDialog.FileName + '"';
  Parameter := '-v -t -user sysdba -password masterkey '+ Quelle +' '+ Ziel;
  ShellExecute(0,nil,PChar(ExeProgramDirectory + 'gbak.exe'),PChar(Parameter),nil,SW_SHOW);
Die Datenwiederherstellung läuft ähnlich, die Datenbankbezeichnung darf allerdings noch nicht vorhanden sein.

Delphi-Quellcode:
var
  BackupFile, DatabaseFile, Parameter : String;
...
  Parameter := '-c -v -user sysdba -password masterkey '+ BackupFile +' '+ DatabaseFile;
  try
    ShellExecute(0,nil,PChar(ExeProgramDirectory + 'gbak.exe'),PChar(Parameter),nil,SW_SHOW);
  except
    on E:Exception do ShowMessage(E.Message);
  end;
Hier erhalte ich die Fehlermeldung ‚Auszug‘:
"gbak: ERROR: I/O error during “CreateFile <create>“ operation for file Datenbankverzeichnis + Datenbankname"
"gbak: ERROR: Error while trying to create file"
"gbak: ERROR: Zugriff verweigert"
"gbak: ERROR: failed to create database Datenbankverzeichnis + Datenbankname"
"gbak: Exiting before completion due to erros"

Denke das hängt mit den Schreibrechten für CSIDL_PROGRAM_FILES zusammen.

Versuche ich jetzt die Datenbank manuell auszutauschen so geht das auch nicht. Bei der Datenbank aus dem Inno Setup steht unter: Rechtsklick – Sicherheit: Authentifizierte Benutzer -> Ändern, Lesen, Ausführen, Schreiben
Kopiere ich die Datenbank einfach in das Anwendungsverzeichnis so fehlt dieser Eintrag Authentifizierte Benutzer. Nur der normal Benutzer ist mit den Rechten -> Lesen, Ausführen vorhanden. Die nur reinkopierte DB kann ich nicht benutzen.

Frage:
Wie kann ich die embedded DB gegen eine andere DB austauschen, für Support oder was auch immer?
Muss die Datenbank doch woanders liegen?
Muss ich andere Rechte in Inno Setup mitgeben?

Grüße
user0815
  Mit Zitat antworten Zitat