Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Firebird, InterBase Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2]      все
 Re: Пример 10.backup.cpp на Pascal  [new]
nicholaos
Member

Откуда:
Сообщений: 104
Вернулся к задачке. Работающий вариант выглядит так:

+ Вызов svc.query

....
dpb2.insertTag(st, isc_action_svc_backup);
dpb2.insertString(st, isc_spb_dbname, PDBName);
dpb2.insertString(st, isc_spb_bkp_file, PBackupFilePath));
dpb2.insertTag(st, isc_spb_verbose);

svc.start(st, dpb2.getBufferLength(st), dpb2.getBuffer(st));

receiveItems[0] := isc_info_svc_server_version;
receiveItems2[0] := isc_info_svc_line;

repeat
    svc.query(st, 0, nil, sizeof(receiveItems2), @receiveItems2, sizeof(results), @results);
until not PrintInfo(@results, sizeof(results), outBuffer);

....



+ PrintInfo

function PrintInfo(p: BytePtr; pSize: cardinal; var outBuffer: string): boolean;
var
  pEnd: BytePtr;
begin
  Result := False;
  pEnd := p;
  Inc(pEnd, pSize);
  while (NativeUInt(p) < NativeUInt(pEnd)) and (p^ <> isc_info_end) do begin
    case p^ of
      isc_info_svc_line: begin
        Inc(p);
        Result := PrintLine(p, outBuffer);
      end;
      isc_info_truncated: begin
        Inc(p);
        Result := True;
      end;
      isc_info_svc_timeout, isc_info_data_not_ready: begin
        Inc(p);
        Result := True;
      end
      else Inc(p);
    end;
  end;
end;



+ PrintLine

function PrintLine(var p: BytePtr; var outBuffer: string): boolean;
var
  Length: word;
  Buffer: array of AnsiChar;
begin
  Length := word(PortableInteger(p, sizeof(word)));
  Inc(p, 2);
  if Length > 0 then begin
    SetLength(Buffer, Length);
    StrLCopy(PAnsiChar(@Buffer[0]), PAnsiChar(p), Length - 1);
    Buffer[Length - 1] := #0;
    outBuffer := outBuffer + Format('%s'#13#10, [PAnsiChar(@Buffer[0])]);
  end;
  Inc(p, Length);
  Result := Length > 0;
end;



Вдруг кому пригодится.
20 ноя 21, 19:16    [22398401]     Ответить | Цитировать Сообщить модератору
 Re: Пример 10.backup.cpp на Pascal  [new]
nicholaos
Member

Откуда:
Сообщений: 104
Есть вопрос по команде isc_action_svc_validate. Аналогичным образом получаю лог проверки. В тексте есть предупреждения и ошибки.
Есть способ получить код возврата? Что-то вроде "есть предупреждения" или "есть ошибки"? Или только парсить лог?
20 ноя 21, 19:18    [22398402]     Ответить | Цитировать Сообщить модератору
 Re: Пример 10.backup.cpp на Pascal  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 54772

nicholaos
        isc_info_truncated:begin
          Inc(p);
          Result := True;
        end;

Вот это - неправильный код. isc_info_truncated это терминирующий тэг и
после его получения должен быть немедленный выход из цикла.

Posted via ActualForum NNTP Server 1.5

20 ноя 21, 19:26    [22398405]     Ответить | Цитировать Сообщить модератору
 Re: Пример 10.backup.cpp на Pascal  [new]
nicholaos
Member

Откуда:
Сообщений: 104
Dimitry Sibiryakov,

Значит в 09.service.cpp/10.backup.cpp тоже ошибка?

К сообщению приложен файл. Размер - 16Kb
20 ноя 21, 19:34    [22398410]     Ответить | Цитировать Сообщить модератору
 Re: Пример 10.backup.cpp на Pascal  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 54772

nicholaos
Значит в 09.service.cpp/10.backup.cpp тоже ошибка?

Да. Я с Алексом уже об этом говорил.

Posted via ActualForum NNTP Server 1.5

20 ноя 21, 19:37    [22398412]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2]      все
Все форумы / Firebird, InterBase Ответить