Konuyu Oyla:
  • Derecelendirme: 0/5 - 0 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Firebird Yedekleme ve Geri Yükleme
#7
Arkadaşlar Delphi 7 ve firebird için kodları düzenledim ve aşağıda paylaşıyorum.

Form üzerindeki bileşenler 1 adet IBBackupService, 1 adet IBRestoreService, 3 adet label, 2 adet buton, 2 adet listbox, 1 adet panel ve 1 adet progressbar

Form görüntüsü için resim yükleyemedim. Alttaki linki tıklarsanız resim açılır.

https://resimyukle.xyz/i/V8A7f6


Ve tüm Unit 'in kodları... Umarım faydalı olur. Kolay gelsin.

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, IBServices, ComCtrls, ExtCtrls, StdCtrls,DateUtils;

type
 TForm1 = class(TForm)
   IBBackupService1: TIBBackupService;
   IBRestoreService1: TIBRestoreService;
   Panel1: TPanel;
   ProgressBar1: TProgressBar;
   Label5: TLabel;
   Yedekle_Btn: TButton;
   Label6: TLabel;
   Label8: TLabel;
   LB_Tarih_Saat: TListBox;
   LB_Dosya_Adi: TListBox;
   Geri_Yukle_Btn: TButton;
   procedure OnAyarlar(Service: TIBCustomService);
   procedure Yedekle_BtnClick(Sender: TObject);
   procedure Geri_Yukle_BtnClick(Sender: TObject);
   procedure FormShow(Sender: TObject);
   procedure LB_Tarih_SaatClick(Sender: TObject);
   procedure LB_Dosya_AdiClick(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}
procedure TForm1.OnAyarlar(Service: TIBCustomService);
begin
  with Service do
     begin
        Active := False;
        ServerName :='localhost'; {*pc'nin adı veya ip  adresi. Ağdaki ve ya kendi  pc'niz olabilir. Kendi bilgisayarım olduğu için localhost yazdım*}
        Protocol :=TCP; {*Basğlantı protokol tipi. Diğer seçenekler için    Bileşeni seçip Object Inspectordan bakabilirsiniz.*}
        LoginPrompt := False; {* Şifreyi biz gireceğimiz için False Yapıyoruz.*}
        Params.Clear; // Params özelliğini tyemizle
        Params.Add('user_name=' +'SYSDBA'); //SYSDBA=kullanıcı adı
        Params.Add('password=' + 'masterkey'); //masterkey=Şifre
     end; //with

  // ProgressBar Özelliklerini ayarla
  ProgressBar1.Min:=0;
  ProgressBar1.Max:=10;
  ProgressBar1.Position:=ProgressBar1.Min;
  Panel1.Show;
  application.ProcessMessages;
  
end;
procedure TForm1.Yedekle_BtnClick(Sender: TObject);
Var
  yedek_dosya_klasoru, yedek_dosya_adi : AnsiString ;
  Yil, Ay, Gun, saat, dakika, saniye, salise : Word;
  Anlik_Tarih : TDate ;
  Anlik_Saat : TTime ;
begin
  Anlik_Tarih := Date ; //şu anki tarihi Anlik_Tarih değişkenine ata
  Anlik_Saat := Time ;  //şu anki saati Anlik_Saat değişkenine ata

  
  DecodeDate ( Anlik_Tarih, Yil, Ay, Gun) ;
  DecodeTime ( Anlik_Saat, saat, dakika, saniye, salise) ;

  with IBBackupService1 do
     begin
        OnAyarlar(IBBackupService1);//procedureyi çağır.
        Verbose := True; //PrograssBar İçin Gerekli

        DatabaseName := ExtractFilePath(Application.ExeName)+'DATA.FDB' ; //yedeklenecek ana veritabanı yolu

        yedek_dosya_klasoru := ExtractFilePath(Application.ExeName) + 'Yedek' ; //Programın kurulu olduğu dizinde Yedek isminde klasör

        If Not DirectoryExists(yedek_dosya_klasoru) Then // yedek dosya klasörü yoksa oluştur
           ForceDirectories(yedek_dosya_klasoru) ;

        BackupFile.Clear ;

        yedek_dosya_adi := inttostr(Gun) + '_' + inttostr(Ay) + '_' + inttostr(Yil) + '_' +
                           inttostr(saat) + '_' + inttostr(dakika) + '_' + inttostr(saniye) + '.FDB';//Yedek dosyaya isim vermek. Ben tarih ve saat olarak isim vermeyi seçtim

        BackupFile.Add(yedek_dosya_klasoru + '\' + yedek_dosya_adi + ' =2048') ;{* yedeklemenin yapılacağı konum ve yedek dosyasının adı. ikinci parametre olan =2048 sanırım yedekleme yapılırken verinin kaçar byte olarak kopyalanacağını belirliyor. *}

        try
           Active := True;
           ServiceStart;  //yedeklemeye başla
           while not EOF do
              begin
                 Label5.Caption:=GetNextLine;//yedekleme durumunu labele yaz

                 {*Progresbar özelliklerini ayarla*}
                 if ProgressBar1.Position=ProgressBar1.Max then
                    ProgressBar1.Position:=0;
                 ProgressBar1.Position:=ProgressBar1.Position+1;
                 application.ProcessMessages;
              end;

           LB_Tarih_Saat.Items.Add(DateToStr(Anlik_Tarih) + ' ' + TimeToStr(Anlik_Saat)) ; //tarih ve saati listboxa yaz
           LB_Dosya_Adi.Items.Add(yedek_dosya_adi) ; //yedek dosya adını listboxa yaz

           LB_Tarih_Saat.Items.SaveToFile(ExtractFilePath(Application.ExeName) + 'Yedek_Tarih.txt'); // listboxı kaydet
           LB_Dosya_Adi.Items.SaveToFile(ExtractFilePath(Application.ExeName) + 'Dosya_Adi.txt'); // listboxı kaydet
        finally
           Active := False;
           Panel1.Hide;
        end; //try
  end; //with
end;

procedure TForm1.Geri_Yukle_BtnClick(Sender: TObject);
Var
  Yedek_Dosya_Adi : AnsiString ;
begin
  with IBRestoreService1 do
     begin
        OnAyarlar(IBRestoreService1);//procedureyi çağır.
        Verbose := True;//PrograssBar İçin Gerekli
        Pagesize:=2048;{* Restore ederken Veritabanının PageeSize özelliğini ayarla. farklı bir seçeneği seçebilirsiniiz*}
        Options := [Replace];//eski veritabanını sil

        DatabaseName.Clear;
        DatabaseName.Add(ExtractFilePath(Application.ExeName)+'DATA.FDB');//yedek dosyanın yükleneceği yer ve dosyanın adı
        BackupFile.Clear;

        Yedek_Dosya_Adi := ExtractFilePath(Application.ExeName) + 'Yedek\' + LB_Dosya_Adi.Items.Strings[LB_Dosya_Adi.ItemIndex] ; //listboxtan geri yüklenmek istenen veritabanının adını al
        if Not fileExists(Yedek_Dosya_Adi) then //geri yüklenmek istenen yedek veritabanı yoksa
           begin
              ShowMessage('Yüklenmek istenen yedek dosya bulunamadı.');
              exit ;//procedure den çık
           end ;

        BackupFile.Add(Yedek_Dosya_Adi); {* daha önce yedeklenmiş olan dosya yolu ve dosya adı *}
        try
           Active := True;
           ServiceStart;//geri yüklemeye başla
           while not EOF do
              Begin
                 Label5.Caption:=GetNextLine; //geri yükleme durumunu labela yaz

                 {*Progresbar özelliklerini ayarla*}
                 if ProgressBar1.Position=ProgressBar1.Max then
                    ProgressBar1.Position:=0;

                 ProgressBar1.Position:=ProgressBar1.Position+1;
                 application.ProcessMessages;
             End;
        finally
           Active := False;
           Panel1.Hide;
        end; //try
  end; //with
end;

procedure TForm1.FormShow(Sender: TObject);
begin
  if fileExists(ExtractFilePath(Application.ExeName)+'Yedek_Tarih.txt') then
     LB_Tarih_Saat.Items.LoadFromFile(ExtractFilePath(Application.ExeName) + 'Yedek_Tarih.txt');

  if fileExists(ExtractFilePath(Application.ExeName)+'Dosya_Adi.txt') then
     LB_Dosya_Adi.Items.LoadFromFile(ExtractFilePath(Application.ExeName) + 'Dosya_Adi.txt');

  LB_Tarih_Saat.ItemIndex := LB_Tarih_Saat.Items.Count - 1 ;
  LB_Tarih_SaatClick(Sender);
end;

procedure TForm1.LB_Tarih_SaatClick(Sender: TObject);
begin
 LB_Dosya_Adi.ItemIndex := LB_Tarih_Saat.ItemIndex ;
end;

procedure TForm1.LB_Dosya_AdiClick(Sender: TObject);
begin
 LB_Tarih_Saat.ItemIndex := LB_Dosya_Adi.ItemIndex ;

end;

end.
Cevapla


Bu Konudaki Yorumlar
Firebird Yedekleme ve Geri Yükleme - Yazar: sunbeki - 21-04-2021, Saat: 13:21
Firebird Yedekleme ve Geri Yükleme - Yazar: shooterman - 21-04-2021, Saat: 13:26
Firebird Yedekleme ve Geri Yükleme - Yazar: mcuyan - 21-04-2021, Saat: 13:53
Cvp: Firebird Yedekleme ve Geri Yükleme - Yazar: MuhammedYasir - 21-04-2021, Saat: 17:02
Firebird Yedekleme ve Geri Yükleme - Yazar: sunbeki - 21-04-2021, Saat: 21:49
Firebird Yedekleme ve Geri Yükleme - Yazar: mcuyan - 21-04-2021, Saat: 22:49
Cvp: Firebird Yedekleme ve Geri Yükleme - Yazar: sunbeki - 22-04-2021, Saat: 10:08
Firebird Yedekleme ve Geri Yükleme - Yazar: COMMANDX - 21-05-2021, Saat: 15:56

Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  firebird bağlantı hatası. Kamuran Alpkaya 17 19.146 06-08-2025, Saat: 14:20
Son Yorum: mcuyan
  FIREBIRD SIRALAMA Kral 10 1.934 15-10-2024, Saat: 19:04
Son Yorum: Kral
  Firebird bağlantı kopmaları (ZeosLib) boreas 0 773 12-06-2024, Saat: 16:08
Son Yorum: boreas
  Firebird Database Create Doğru mu? Altıner 2 1.311 02-05-2024, Saat: 11:00
Son Yorum: hi_selamlar
  pardusda dbeaver ıle fırebırd kullanımı hakkında sadikacar60 8 2.344 29-02-2024, Saat: 17:50
Son Yorum: Hayati



Konuyu Okuyanlar: 1 Ziyaretçi