When I back up the MSSQL database with the following:
program mssqlbackup;
// Backs up database test.
{$mode objfpc}{$H+}
uses
{$IFDEF UNIX}{$IFDEF UseCThreads}
cthreads,
{$ENDIF}{$ENDIF}
Classes, sysutils,
sqldb,
mssqlconn;
var
Conn: TMSSQLConnection;
Tran: TSQLTransaction;
begin
Conn:=TMSSQLConnection.create(nil);
Tran:=TSQLTransaction.create(nil);
try
//adjust credentials
Conn.HostName:='127.0.0.1';
Conn.UserName:=''; //trusted authentication/SSPI
Conn.Password:=''; //trusted authentication/SSPI
Conn.DatabaseName:='master';
Conn.Params.Add('AutoCommit=true');
Conn.Transaction:=Tran;
Conn.Open;
// adjust path
Conn.ExecuteDirect('backup database test to disk = N''C:\TEMP\TEST2.bak'' with format, init');
Conn.Close;
finally
Tran.Free;
Conn.Free;
end;
writeln('Program complete. Press a key to continue.');
readln;
end.
, it suspends my program until it finished. I want to show status of backup progress such as MSSQL script:
SELECT r.session_id,r.command,CONVERT(NUMERIC(6,2),r.percent_complete)
AS [Percent Complete],CONVERT(VARCHAR(20),DATEADD(ms,r.estimated_completion_time,GetDate()),20) AS [ETA Completion Time],
CONVERT(NUMERIC(10,2),r.total_elapsed_time/1000.0/60.0) AS [Elapsed Min],
CONVERT(NUMERIC(10,2),r.estimated_completion_time/1000.0/60.0) AS [ETA Min],
CONVERT(NUMERIC(10,2),r.estimated_completion_time/1000.0/60.0/60.0) AS [ETA Hours],
CONVERT(VARCHAR(1000),(SELECT SUBSTRING(text,r.statement_start_offset/2,
CASE WHEN r.statement_end_offset = -1 THEN 1000 ELSE (r.statement_end_offset-r.statement_start_offset)/2 END) SQLScript
FROM sys.dm_exec_sql_text(sql_handle)))
FROM sys.dm_exec_requests r WHERE command IN ('RESTORE DATABASE','BACKUP DATABASE')
How can I show the backup progress status via percentage or progress bar?
Thanks