MSSQL uygulama içinden query ile yedek alırken progressbar?

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
m_yaprakci

MSSQL uygulama içinden query ile yedek alırken progressbar?

Mesaj gönderen m_yaprakci »

Merhaba.
Adoquery ile MSSQL Database'in yedeğini alma esnasında progressbarı nasıl ilerletebilirim?
Teşekkürler.

Örnek Sorgu şu şekilde :

Kod: Tümünü seç

Adoquery1.sql.text:=('backup database Test_Dummy to disk = N''C:\TEMP\TEST_Dummy.bak'' with format, init');
ExecSQL;
Şimdiden teşekkürler.
m_yaprakci

Re: MSSQL uygulama içinden query ile yedek alırken progressbar?

Mesaj gönderen m_yaprakci »

mkysoft yazdı:Eventler üzerinden yapabilirsiniz.
http://blog.dbi-services.com/sql-server ... -restores/
Merhaba yanıtınız için çok teşekkür ederim.

Eventlar konusunda çok fazla bilgim ve tecrübem olmadığı için farklı bir yöntemle hallettim.

İhtiyaç olabileceği için kodları buraya ekliyorum.

Forma bir adet Button ve Memo koyun.
( deneme amaclı memo kullandım. Progressbar'a atamak için basit COPY ve POS fonksiyonları kullanılabilir. )

Kod: Tümünü seç

uses AdoInt,ComObj;
...
...
...
procedure TForm1.btn1Click(Sender: TObject);
var cmd  : _Command;
    Conn : _Connection;
    RA   : OleVariant;
    rs   :_RecordSet;
    n    : Integer;
begin
  Memo1.Clear;

  Conn := CreateComObject(CLASS_Connection) as _Connection;
  Conn.ConnectionString := 'Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=Monster;Data Source=NC8430';
  Conn.Open(Conn.ConnectionString,'','',Integer(adConnectUnspecified));

  cmd := CreateComObject(CLASS_Command) as _Command;
  cmd.CommandType := adCmdText;
  cmd.Set_ActiveConnection(Conn);
  cmd.CommandText := 'BACKUP DATABASE [Monster] TO  DISK = N''c:\backupdeneme\deneme.bak'' WITH  INIT ,  NOUNLOAD ,  NAME = N''Deneme yedek'',  NOSKIP ,  STATS = 1,  NOFORMAT;';
  rs:=cmd.Execute(RA,0,Integer(adCmdText));

  while (rs<>nil) do
  begin
   for n:=0 to(Conn.Errors.Count-1)do begin
    Memo1.Lines.Add(Conn.Errors.Item[n].Description);
   end;
   rs:=rs.NextRecordset(RA);
  end;

  cmd.Set_ActiveConnection(nil);
  Conn.Close;
  cmd  := nil;
  Conn := nil;
end;
Burada memo içerisine şu şekilde adım adım ekleme yapıyor.

Kod: Tümünü seç

1 percent processed.
2 percent processed.
3 percent processed.
...
...
...
97 percent processed.
98 percent processed.
99 percent processed.
Processed 1216 pages for database 'Monster', file 'Monster' on file 1.
100 percent processed.
Processed 1 pages for database 'Monster', file 'Monster_log' on file 1.
BACKUP DATABASE successfully processed 1217 pages in 2.278 seconds (4.173 MB/sec).

cmd.CommandText e atadığımız string içerisindeki STATS=1 değeri birer birer artırmaya yarıyor.
STATS=10 yazarsak onar onar artıracaktır.
Cevapla