dosya kontrolü (Firebird==>gbak)

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
baypipox
Üye
Mesajlar: 122
Kayıt: 16 Eki 2006 04:23
İletişim:

dosya kontrolü (Firebird==>gbak)

Mesaj gönderen baypipox »

Kod: Tümünü seç

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Buttons, StdCtrls;

type
  TForm1 = class(TForm)
    SpeedButton1: TSpeedButton;
    OpenDialog1: TOpenDialog;
    ekran: TLabel;
    SpeedButton2: TSpeedButton;
    procedure SpeedButton1Click(Sender: TObject);
    procedure SpeedButton2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  dosyaadi,kayitadi,yolb,yolr:string;
  a:integer;
  b:string;
 // label tekrar;
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
if OpenDialog1.Execute then
dosyaadi:=(OpenDialog1.FileName);
b:=(dosyaadi);
ShowMessage(dosyaadi);
a:=Length(b);
Delete(b,a-3,4);
kayitadi:=b+'.gbk';
ShowMessage(kayitadi);
yolb:=('C:\Program Files\Firebird\Firebird_1_5\bin\gbak  -b -v  -user sysdba -pas masterkey  '+#34+dosyaadi+#34+' '+#34+kayitadi+#34);
yolr:=('C:\Program Files\Firebird\Firebird_1_5\bin\gbak  -r -v  -user sysdba -pas masterkey  '+#34+kayitadi+#34+' '+#34+dosyaadi+#34);
WinExec(pchar(yolb),SW_HIDE);
repeat
  ekran.Caption:='Backup İşlemi devam ediyor...';
until FileExists(kayitadi);
ekran.Caption:='Baclup işlemi bitti';
end;

procedure TForm1.SpeedButton2Click(Sender: TObject);
begin
ekran.Caption:='ReStore İşlemi Başladı...';
WinExec(pchar(yolr),SW_HIDE);
ekran.Caption:='ReStore İşlemi Bitti...';
end;

end.
Arkadaşlar koddada göreceğiniz üzere ben firebird de gbak ı kullanarak
backup alıyorum. ben gbk dosyasının oluşup oluşmadığını anlamak için
fileexists komutunu kullanıyorum lakin komut benim işime yaramadı çünkü gbk dosyası oraya ben backup ı başlatır başlatmaz hemen oluşuyo
ve yavaş yavaş boyutu artıyo ve ekran da label da ben göstermek
istediğim mesajları göstermiyorum kodda gördüğünüz üzere hemen backup işlemi bitti diyo bunu nasıl kontrol edebilirim yardımlarınız
bekliyorum hepinize kolay gelsin...
Kullanıcı avatarı
TRSoft
Kıdemli Üye
Mesajlar: 636
Kayıt: 13 Şub 2004 11:39
Konum: Konya
İletişim:

Mesaj gönderen TRSoft »

Merhabalar;

Tavsiyem backup işlemlerini Interbase Admin sekmesinde bulabileceğin IbBackupServise bileşeni ile yapman. Böylece ekranda ilerleme sırasındaki mesajlarıda son kullanıcıya gösterebilirsin..

kolay gelsin..
İlimle geçen bir gece,
ibadetle geçen bin geceden hayırlıdır.
HZ. MUHAMMED (S.A.)
Kullanıcı avatarı
baypipox
Üye
Mesajlar: 122
Kayıt: 16 Eki 2006 04:23
İletişim:

Mesaj gönderen baypipox »

tamam onu deniyeceğim ama benim kodda onu kontrol edebileceğim bir şey yapamazmıyız acaba...
Hakan Can
Üye
Mesajlar: 634
Kayıt: 04 Mar 2005 04:27
Konum: Ankara

Mesaj gönderen Hakan Can »

İlla bu şekilde yapacağım diyorsan (ki "TRSoft" en mantıklı yolu söylemiş) RenameFile function'unu kullanarak bu işlemi yapabilirsin.

Yani FileExists olduğu anda dosyanın adını RenameFile ile değiştirmeye çalışırsın. Ne zaman ki değişir adı o zaman Backup işlemi bitmiştir demek. Zira dosya adını Backup işlemi bitene kadar değiştiremezsin. Sonra da tekrar RenameFile ile normal adına geri çevirirsin.

Örnek kod:

Kod: Tümünü seç

ekran.Caption:='Backup İşlemi devam ediyor...';
repeat
  Sleep(1);
  if FileExists(kayitadi) then
  begin
    if FileExists(kayitadi + '_XXX') then DeleteFile(kayitadi + '_XXX');
    if RenameFile(kayitadi, kayitadi + '_XXX') then
    begin
      RenameFile(kayitadi + '_XXX', kayitadi);
      Break;
    end;
  end;
until 1 = 2;
ekran.Caption:='Baclup işlemi bitti';
İyi çalışmalar.
Kullanıcı avatarı
sadettinpolat
Moderator
Mesajlar: 2131
Kayıt: 07 Ara 2003 02:51
Konum: Ankara
İletişim:

Mesaj gönderen sadettinpolat »

Hakan Can'ın cozumune ek bir cozum de bu olabilir.

Kod: Tümünü seç

Function FileIsInUse( Const fname: String ): Boolean;
 Var
   fhandle: Integer;
 Begin
   fhandle := FileOpen(fname, fmOpenReadWrite or fmShareExclusive);
   Result := fhandle <= 0;
   if not Result then
     FileClose(fhandle);
 End;

procedure TForm1.Button1Click(Sender: TObject);
begin
if OpenDialog1.Execute then
  if  FileIsInUse(OpenDialog1.FileName) then
    ShowMessage('dosya kullaniliyor')
  else
    ShowMessage(' dosya kullanilmiyor')

end;
"Sevmek, ne zaman vazgececegini bilmektir." dedi, bana.

---
http://sadettinpolat.blogspot.com/
Kullanıcı avatarı
baypipox
Üye
Mesajlar: 122
Kayıt: 16 Eki 2006 04:23
İletişim:

Mesaj gönderen baypipox »

sadettin abi senin yaptığını anlayamadım yaw, biraz açıklayabilirmisin.
Kullanıcı avatarı
sadettinpolat
Moderator
Mesajlar: 2131
Kayıt: 07 Ara 2003 02:51
Konum: Ankara
İletişim:

Mesaj gönderen sadettinpolat »

FileIsInUse fonksiyonu, parametre olarak verdigin dosya o an kullanimda mi degil mi sorusuna cevap veriyor. kullanimda ise yedekleme islemi devam ediyor , kullanimda degil ise yedekleme islemi bitmistir dusuncesiyle hareket ediyoruz.
"Sevmek, ne zaman vazgececegini bilmektir." dedi, bana.

---
http://sadettinpolat.blogspot.com/
Kullanıcı avatarı
baypipox
Üye
Mesajlar: 122
Kayıt: 16 Eki 2006 04:23
İletişim:

Mesaj gönderen baypipox »

tmm anladım abi tşkr ederim saol.
Cevapla