Страница 1 из 1

TibRestore не выполняется функция восстановления

Добавлено: 07 апр 2005, 20:05
ali
на Delphi 6 эта функция работает , а на 7 почему то нет

function TfmMain.StartRestore(FileName: String): Boolean;
var
Cursor: TCursor;
begin
Cursor := Screen.Cursor;
Screen.Cursor := crSQLWait;
Result:=False;
try
ibRestore.BackupFile.Add(FileName);
ibRestore.DatabaseName.Add(dbALI.DatabaseName);
ibRestore.Attach();
ibRestore.ServiceStart;<---здесь выполнение функции прекращается
Result:=True;
finally
if ibRestore.Active then ibRestore.Detach();
Screen.Cursor := Cursor;
end;
end;

Добавлено: 07 апр 2005, 20:37
kdv
IBRestore.ServerName:='server';
IBRestore.Protocol:=TCP;
IBRestore.DatabaseName.Add('c:\dir\data.gdb');
IBRestore.BackupFile.Add('c:\dir\data.gbk');
...

в DatabaseName НЕ пишется имя сервера. Оно пишется только в ServerName. Ты бы указал, чем ты там заполняешь параметры.
ibRestore.ServiceStart;<---здесь выполнение функции прекращается
потому что не может к серверу достучаться?

Добавлено: 09 апр 2005, 03:13
ali

Код: Выделить всё

function TfmMain.StartRestore(FileName: String): Boolean;
var
  Cursor: TCursor;
begin
  Cursor := Screen.Cursor;
  Screen.Cursor := crSQLWait;
  Result:=False;
     try
      MainTransaction.CommitRetaining;
      MainTransaction.Active:=False;
      ibRestore.Attach;
      ShutDownDataBase;
      ibRestore.BackupFile.Add(FileName);
      ibRestore.DatabaseName.Add(dbALI.DatabaseName);
      ibRestore.ServiceStart;
      Result:=True;
     finally
       if ibRestore.Active then ibRestore.Detach();
         Screen.Cursor := Cursor;
     end;
end;

procedure TfmMain.ShutDownDataBase;
begin
  if MainTransaction.InTransaction then
    MainTransaction.Commit;
  dbALI.CloseDataSets;
  dbALI.Close;
end;
buffsize 32000
Options [Replace,CreateNewDB,UseAllSpace]
PageSize 8192
Запускаю на сервере
Server ''

Ругается Cannot perform operation DB is not open,
а когда базу не выключаю ругается на то что транзакция активна

Добавлено: 09 апр 2005, 13:37
kdv
MainTransaction.CommitRetaining;
MainTransaction.Active:=False;
бред. зачем commitretaining, если можно просто Commit вызвать?
ты подумай, что ты пишешь-то...

что у тебя за имя базы и имя бэкапа? почему ты не указываешь ServerName?

Добавлено: 10 апр 2005, 02:17
ali
не пишу имя сервера потому что работаю на сервере