Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi DB Restore mit Fibplus (https://www.delphipraxis.net/80009-db-restore-mit-fibplus.html)

manfred_h 1. Nov 2006 14:23

Datenbank: Firebird • Version: 1.5 • Zugriff über: Fibplus

DB Restore mit Fibplus
 
Hallo zusammen

habe ein Problem mit dem Restore einer DB bei dem immer die Fehlermeldung

Exception class EStringListError with message 'List index out of bounds (0)'

auftaucht.

Delphi-Quellcode:
procedure Tfrm_backup_restore.btn_restoreClick(Sender: TObject);
begin
  with DM.Restore_Service do
  begin
    OpenDialogBackup.Options := [ofFileMustExist];
    if not (OpenDialogBackup.Execute) then exit;
    Options := [Replace, CreateNewDB];
    DatabaseName.Clear;
    BackupFile.Clear;
    memo_log.Clear;
    memo_log.Lines.Add('*** Database file(s): ***');
    for i := 0 to OpenDialogDatabase.Files.Count - 1 do
    memo_log.Lines.Add('*** Backup file(s): ***');
    DatabaseName.Add (IncludeTrailingPathDelimiter(GetCurrentDir)+('GIDEONS_DB.FDB'));
    for i := 0 to OpenDialogBackup.Files.Count - 1 do
    begin
      BackupFile.Add(OpenDialogBackup.Files.Strings[i]);
      memo_log.Lines.Add(OpenDialogBackup.Files.Strings[i]);
    end;
    memo_log.Lines.Add(
    '==================== Restore started ====================');
    Active := True;
    btn_backup.Enabled := False;
    btn_restore.Enabled := False;
    ServiceStart;
    while not (Eof) do
      memo_log.Lines.Add(GetNextLine);
    Active := False;
    btn_backup.Enabled := True;
    btn_restore.Enabled := True;
    memo_log.Lines.Add(
    '==================== Restore ended ====================');
  end;
end;
kann mir da jemand weiterhelfen.
Bin schon seit einiger Zeit am Testen.

Shalom
Manfred

Hansa 1. Nov 2006 15:00

Re: DB Restore mit Fibplus
 
Das da hat mit FIBplus aber wirklich nur bedingt zu tun. Aus dem Source glaube ich erkennen zu können, daß es zwei Memos oder was ganz anderes gibt, wo Dateinamen aufgelistet werden. :duck: Die Glaskugel vermutet, das wäre deshalb so, weil es eventuell um eine Auswahl verschiedener Backups geht. Kommt mir wegen der Fehlermeldung aber so vor, als würde es lediglich an den Schleifen liegen. Deshalb kurz und knapp : die Erläuterung was was ist und der (unkommentierte) Source ist zu knapp. :mrgreen:

manfred_h 1. Nov 2006 15:21

Re: DB Restore mit Fibplus
 
Hallo Hansa

Delphi-Quellcode:
procedure Tfrm_backup_restore.btn_restoreClick(Sender: TObject);
begin
  with DM.Restore_Service do
  begin
    Options := [Replace, CreateNewDB];
    DatabaseName.Clear;                // Database Paramameter Clear
    BackupFile.Clear;                  // BackupFile Paramameter Clear
   DatabaseName.Add (IncludeTrailingPathDelimiter(GetCurrentDir)+('GIDEONS_DB.FDB'));
   BackupFile.Add (IncludeTrailingPathDelimiter(GetCurrentDir)+('gideons_db_backup__01.11.2006.gbk'));
    memo_log.Lines.Add(
    '==================== Restore started ====================');
    Active := True;                    // FIBPlus Backup Service Active
    btn_backup.Enabled := False;       // Backupbutton diabled
    btn_restore.Enabled := False;      // Restorebutton diabled
    ServiceStart;                      // FIBPlus Backup Service Start
    while not (Eof) do                 // Logoutput to memo_log
      memo_log.Lines.Add(GetNextLine);
    Active := False;                   // FIBPlus Backup Service Active
    btn_backup.Enabled := True;        // Backupbutton enabled
    btn_restore.Enabled := True;       // Restorebutton enabled
    memo_log.Lines.Add(
    '==================== Restore ended ====================');
  end;
end;
Habe das ganze versucht ein wenig zu Dokumentieren ( ma lernt immer dazu :wink: )
Das Memofeld ist nur dazu da um den Output ( Log ) darzustellen damit der User sieht
das was läuft.
Die Auswahl der Dateien habe ich rausgenommen um dem Problem ein wenig
näher zu kommen. ...

Der Fehler tritt immer noch auf. ( mit obigem Code )

Manfred

MrSpock 1. Nov 2006 15:25

Re: DB Restore mit Fibplus
 
Hallo manfred_h,

sind die drei Listen DatabaseName, BackupFile und memo_log mit Create erstellt worden, bevor du hier Clear aufrufst?

Ist es korrekt, dass du OpenDialogBackup.Execute aufrufst, aber hinterher auf OpenDialogDatabase zugreifst?

[add]
Wo kommt GetCurrentDir her?
[/add]

manfred_h 1. Nov 2006 15:36

Re: DB Restore mit Fibplus
 
Zitat:

Zitat von MrSpock
sind die drei Listen DatabaseName, BackupFile und memo_log mit Create erstellt worden, bevor du hier Clear aufrufst?


Hallo MrSpock

Die "Komponenten ( DatabaseName, BackupFile )" sind in einem Datamodule da muss ich die doch nicht noch mit create erstellen?

Die Memokomponente funktionier auch aber sobald
Delphi-Quellcode:
 
 Active := False;                   // FIBPlus Backup Service Active
ausgeführt wird kommt die Fehlermeldung.

Zitat:

Zitat von MrSpock
Ist es korrekt, dass du OpenDialogBackup.Execute aufrufst, aber hinterher auf OpenDialogDatabase zugreifst?

Das war ein Fehler und hab in auch entfernt. Danke.

Shalom
Manfred

>>MrSpock
Wo kommt GetCurrentDir her?
> Wie meinst Du das?

manfred_h 1. Nov 2006 16:01

Re: DB Restore mit Fibplus
 
Hallo esten dank für Eure Hilfe

Das Problem war das ich die Userdaten nicht übergeben habe:

Delphi-Quellcode:
procedure Tfrm_backup_restore.btn_restoreClick(Sender: TObject);
begin
  with DM.Restore_Service do
  begin
    Params.Add ('user_name=sysdba');
    Params.Add ('password=masterkey');
    Options := [Replace, CreateNewDB];
    DatabaseName.Clear;                // Database Paramameter Clear
    BackupFile.Clear;                  // BackupFile Paramameter Clear
   DatabaseName.Add (IncludeTrailingPathDelimiter(GetCurrentDir)+('GIDEONS_DB.FDB'));
   BackupFile.Add (IncludeTrailingPathDelimiter(GetCurrentDir)+('gideons_db_backup__01.11.2006.gbk'));
    memo_log.Lines.Add(
    '==================== Restore started ====================');
    Active := True;                    // FIBPlus Backup Service Active
    btn_backup.Enabled := False;       // Backupbutton diabled
    btn_restore.Enabled := False;      // Restorebutton diabled
    ServiceStart;                      // FIBPlus Backup Service Start
    while not (Eof) do                 // Logoutput to memo_log
      memo_log.Lines.Add(GetNextLine);
    Active := False;                   // FIBPlus Backup Service Active
    btn_backup.Enabled := True;        // Backupbutton enabled
    btn_restore.Enabled := True;       // Restorebutton enabled
    memo_log.Lines.Add(
    '==================== Restore ended ====================');
  end;
end;
Danke Euch beiden.
Shalom
Manfred

MrSpock 1. Nov 2006 17:11

Re: DB Restore mit Fibplus
 
Hallo Manfred,

ich wusste nicht, aus welchem Modul die Procedure GetCurrentDir stammt und ob der von der Prozedur übergebene Pfad eventuell inkorrekt ist.
Interessant ist nur, dass das Vergessen der Übergabe der Parameter eine nicht so gaaanz aussagekräftife Fehlermeldung hervorbringt. :mrgreen:

manfred_h 1. Nov 2006 17:17

Re: DB Restore mit Fibplus
 
Hallo MrSpock

ja da gebe ich Dir recht.
Danke trozdem.

Shalom
Manfred


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