Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Firebird embedded DB austauschen (https://www.delphipraxis.net/172445-firebird-embedded-db-austauschen.html)

user0815 4. Jan 2013 08:38

Datenbank: Firebird • Version: 2.5.1 • Zugriff über: UniDAC

Firebird embedded DB austauschen
 
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

Lemmy 4. Jan 2013 08:56

AW: Firebird embedded DB austauschen
 
Hallo,

eine Datenbank bzw. alle von allen Nutzern bearbeitbaren Dateien (Inis usw.) gehören in den CommonAppDataPath.

Alternativ wäre die DB im Programmverzeichnis über den Firebirdserver problemlos nutzbar (wenn der Connectionstring mit localhost bzw. der IP aufgebaut wird)

Grüße

user0815 4. Jan 2013 09:25

AW: Firebird embedded DB austauschen
 
gut, werde die DB in folgendes Verzeichnis packen:

Code:
[Dirs]
Name: "{commonappdata}\{#MyAppName}\database\"; Permissions: authusers-modify;
Muss ich noch was beachten?
Meine muss ich z.B. in der "firebird.conf" das RootDirectory setzen?
Wenn ja kann ich das schon im Inno Setup erledigen, und wenn ja wie?
Bleiben die dll´s usw. im EXE Verzeichnis?

Morphie 4. Jan 2013 09:42

AW: Firebird embedded DB austauschen
 
Alles, was vom Benutzerkonto bearbeitet werden soll (Datenbank, Einstellungsdateien usw.) muss ins CommonAppData.
Alles was zum Programm gehört (Exe, DLLs, firebird.conf (weil diese nur vom Administrator geändert werden sollte)) gehört ins Programmverzeichnis.

die firebird.conf musst du eigentlich nicht ändern.

p80286 4. Jan 2013 09:48

AW: Firebird embedded DB austauschen
 
Abgesehen davon, daß die Daten nicht ins Programmverzeichnis gehören, macht mich die Fehlermeldung stutzig
Zitat:

Zitat von user0815 (Beitrag 1197586)
"gbak: ERROR: I/O error during “CreateFile <create>“ operation for file Datenbankverzeichnis + Datenbankname"

könnte es sein, daß da Parameter falsch übernommen werden?
Datenbankverzeichnis + Datenbankname ist schon ein wenig seltsam.

Gruß
K-H

Lemmy 4. Jan 2013 09:51

AW: Firebird embedded DB austauschen
 
Zitat:

Zitat von Morphie (Beitrag 1197592)
Alles, was vom Benutzerkonto bearbeitet werden soll (Datenbank, Einstellungsdateien usw.) muss ins CommonAppData.

Äh.. Korrektur bzw. einfach damit es hier kein Missverständnis gibt:

Alles was NUR vom Benutzer bearbeitet werden soll kommt ins UserAppData, das was von allen bearbeitet werden soll ins CommonAppData. Wobei das "UserAppData" auch vom Programm erstellt werden sollte und nicht zwingend durchs Setup (außer dass das wirklich nur von dem einen Benutzer bedient werden können soll)

Grüße

Morphie 4. Jan 2013 09:55

AW: Firebird embedded DB austauschen
 
Richtig. Ich schrieb "Benutzerkonto" um den Unterschied zum Administratorkonto deutlich zu machen. Hat wohl nicht ganz geklappt ;-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:02 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