powered by simpleCommunicator - 2.0.18     © 2024 Programmizd 02
Map
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Пример 10.backup.cpp на Pascal
5 сообщений из 30, страница 2 из 2
Пример 10.backup.cpp на Pascal
    #40113387
nicholaos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вернулся к задачке. Работающий вариант выглядит так:

Вызов svc.query
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
....
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
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
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
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
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;




Вдруг кому пригодится.
...
Рейтинг: 0 / 0
Пример 10.backup.cpp на Pascal
    #40113388
nicholaos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть вопрос по команде isc_action_svc_validate. Аналогичным образом получаю лог проверки. В тексте есть предупреждения и ошибки.
Есть способ получить код возврата? Что-то вроде "есть предупреждения" или "есть ошибки"? Или только парсить лог?
...
Рейтинг: 0 / 0
Пример 10.backup.cpp на Pascal
    #40113391
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nicholaos
Код: pascal
1.
2.
3.
4.
        isc_info_truncated:begin
          Inc(p);
          Result := True;
        end;


Вот это - неправильный код. isc_info_truncated это терминирующий тэг и
после его получения должен быть немедленный выход из цикла.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Пример 10.backup.cpp на Pascal
    #40113395
nicholaos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov,

Значит в 09.service.cpp/10.backup.cpp тоже ошибка?
...
Рейтинг: 0 / 0
Пример 10.backup.cpp на Pascal
    #40113397
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nicholaosЗначит в 09.service.cpp/10.backup.cpp тоже ошибка?

Да. Я с Алексом уже об этом говорил.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
5 сообщений из 30, страница 2 из 2
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Пример 10.backup.cpp на Pascal
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали тему (1): Анонимы (1)
Читали форум (1): Анонимы (1)
Пользователи онлайн (9): Анонимы (6), Bing Bot 2 мин., Yandex Bot 2 мин., RePredeclared 4 мин.
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]