Componentes.Terceros.jvcl/official/3.00/examples/JvUIB/API/StartBackup.dpr

85 lines
1.8 KiB
ObjectPascal

program StartBackup;
{$APPTYPE CONSOLE}
uses
SysUtils, JvUIBase, JvUIBLib;
const
user = 'SYSDBA';
pass = 'masterkey';
var
svc_handle: IscSvcHandle = nil;
respbuf: string;
spb, thd: string;
Len: Word;
FLibrary:TUIBLibrary;
begin
if (ParamCount <> 2) then
begin
writeln(ParamCount);
writeln(format('Usage: %s dbfile backupfile', [ParamStr(0)]));
readln;
halt(1);
end;
FLibrary := TUIBLibrary.Create;
try
spb := spb + isc_spb_version;
spb := spb + isc_spb_current_version;
spb := spb + isc_spb_user_name;
spb := spb + char(Length(user));
spb := spb + user;
spb := spb + isc_spb_password;
spb := spb + char(strlen (pass));
spb := spb + pass;
FLibrary.ServiceAttach('service_mgr', svc_handle, spb);
try
thd := thd + isc_action_svc_backup;
thd := thd + isc_spb_dbname;
thd := thd + Char(Length(ParamStr(1)));
thd := thd + Char(Length(ParamStr(1))shr 8); // second part of smallint
thd := thd + ParamStr(1);
thd := thd + isc_spb_bkp_file;
thd := thd + Char(Length(ParamStr(2)));
thd := thd + Char(Length(ParamStr(2))shr 8);
thd := thd + ParamStr(2);
thd := thd + isc_spb_verbose;
Writeln('Attach succeed');
FLibrary.ServiceStart(svc_handle, thd);
SetLength(respbuf, 1024);
while true do
begin
FLibrary.ServiceQuery(svc_handle, '', isc_info_svc_line, respbuf);
if (respbuf[1] <> isc_info_svc_line) then
begin
WriteLn('Invalid line.');
Exit;
end;
Len := PWord(@respbuf[2])^;
if len > 0 then
Writeln(copy(respbuf, 4, len)) else
Break;
end;
finally
FLibrary.ServiceDetach(svc_handle);
writeln('Press enter to continue.');
Readln;
end;
finally
FLibrary.Free;
end;
end.