Access Veritabanını Yedekleme
#1
Aşağıdaki prosedur dosyanızı yedekler, sıkıştır & onar ve WinRAR ile sıkıştırıp arşivlemeye yarar.

Visual Basic
  1. '*******************************
  2. '*******************************
  3. '**** Zeki Gürsoy © ********
  4. '**** 2008 ********
  5. '*******************************
  6. '*******************************
  7. '17.03.2008 => Güncelleme : 10 Mb lık birimler halinde kopyalama hızı artırıldı.
  8.  
  9. Option Base 1
  10.  
  11. Sub Yedekle()
  12. Const BackUpFile As String = "C:\BackUp.mdb"
  13. Const tmpBackUpFile As String = "C:\tmpBackUp.mdb"
  14.  
  15. WinRARX$ = Environ$("ProgramFiles") & "\WinRAR\rar.exe"
  16.  
  17. '// Yedekleme proseduru..
  18. Yedek_Proc CurrentProject.FullName, BackUpFile
  19.  
  20. '// Veritabanı sıkıştırma ve onarma.. _
  21.   Ver. 2000 - 2002 - 2003 için !!!
  22. DBEngine.CompactDatabase _
  23. BackUpFile, tmpBackUpFile
  24.  
  25. '// İlk yedeği sil..
  26. Kill BackUpFile
  27.  
  28. '// Sıkıştırma işlemi için geçici dosyanın _
  29.   adına orjinal ismini ver..
  30. While Dir(tmpBackUpFile) = ""
  31. DoEvents
  32. Wend
  33. '
  34. Name tmpBackUpFile As BackUpFile
  35.  
  36. '// WinRAR ile sıkıştırma...
  37. Shell WinRARX & _
  38. " M -ep " & Chr(34) & Left$(BackUpFile, Len(BackUpFile) - 4) & ".rar" & _
  39. Chr(34) & " " & Chr(34) & BackUpFile & Chr(34)
  40. MsgBox "Yedekleme işlemi tamamlandı.", vbInformation
  41. End Sub
  42.  
  43. Sub Yedek_Proc(Kaynak_Dosya As String, Hedef_Dosya As String)
  44. On Error GoTo Hata
  45.  
  46. '// 10485760 Byte = 10 MB
  47. Dim s(10485760) As Byte, X As Long
  48. Dim T() As Byte, i As Integer
  49.  
  50. Open Kaynak_Dosya For Binary Access Read As #1
  51. Open Hedef_Dosya For Binary Access Write As #2
  52.  
  53. '// Döngünün kaç kez çalışması gerektiğini _
  54.   toplam dosya boyutunun 10 MB ile bölümün _
  55.   tamsayı değeri ile buluruz.
  56. For i = 1 To Int(LOF(1) / 10485760)
  57. Get #1, , s
  58. Put #2, , s
  59. Next
  60.  
  61. Erase s
  62.  
  63. '// Eğer kalan Byte 10 MB dan küçükse _
  64.   kalan Byte aşağıdaki yapı ile eklenir.
  65. X = LOF(1) - LOF(2)
  66. If X > 0 Then
  67. ReDim T(X) As Byte
  68. Get #1, , T
  69. Put #2, , T
  70. Erase T
  71. End If
  72.  
  73. Cikis:
  74. Close #1
  75. Close #2
  76.  
  77. Exit Sub
  78.  
  79. Hata: MsgBox "Hata olustu." & Chr(10) & Err.Description
  80. GoTo Cikis
  81. End Sub





  Alıntı
Bu mesajı beğenenler: webtenoyna
#2
Merhaba sayın Zeki Gürsoy ..

Şimdi bir örnek üzerinde denedim..

Sonuç: mükemmel Wink

Bir çok yedekleme çalışmasını çöpe atacak, çok profesyonel bir çalışmaya imza atmışsınız..

Çok teşekkürler..



  Alıntı
Bu mesajı beğenenler:
#3
Sayın Zeki Gürsoy

Bu muhteşem kod için çok teşekkür ederim.
Kod, içinde bulunduğu access dosyasını sıkıştırarak çok güzel bir şekilde yedekliyor. Acaba rica etsek yolunu göstermek, yada yolu kod içine yerleştirmek suretiyle başka bir acces dosyasını da yedeklemek mümkün müdür?
Hatta mazur görürseniz biraz daha ileri gitmek suretiyle belirli tarih veya saat aralığında otomatik
yedekleme yaptırmak mümkün müdür?



  Alıntı
Bu mesajı beğenenler:
#4
Sn.Zeki bey oldukça etkilenmedim desem yalan olur.Ancak benim amatörlüğümü mazur görüp öyle sorunuma yaklaşmanızı istirham edeceğim.
Ben yapmış olduğum pers.programını 6 kullanıcı ile bir sorverin bulunduğu ağda kullanıyuorum.Tabloları ve diğer çalışma araçlarını bölünmüş olarak kullanıyoruz porgramı.
Sizin bu çalışmanız içinde bulunduğu kısmını yedekliyor.Yani formların sorguların ve diğer çalışma araçlarının bulunduğu kısmını yada sadece tabloların bulunduğu kısmını.Ben arzu ediyorum ki formlar üzrinde bulunan bir buton yardımı ile asıl bilginin depolandığı kısmın yabi "*be.mdb" olan kısmın depolanmasını istiyorum.Oysa sizin kodu formların ve diğer araçların olduğu kısmı yedekliyor.
Sorum şu ki sizin kodunuz otomatik olarka mı yedekliyor?
Hiç bir şekilde kodu çalıştır demeye gerek yok mu?
Eğer otomatik değilse koddan asıl verinin olduğu kısmı yedekletmenin çarsi varmıdır?
İlginize ve alakanıza şimdiden teşekkürler ederim.



  Alıntı
Bu mesajı beğenenler:
#5
Beğendiğinize sevindim arkadaşlar.

Erzurumlu:
Proseduru aktif projeyi yedekleyecek biçimde tasarladım.(Genelde böyle ihtiyaç oluyor.)
Dosya yolunu değişekene ya da sabite kod içinde tanımlayabileceğiniz gibi, gözat diyaloğu ile belirleyebilirsiniz. Otomatik yedeklemeniz için Timer kullanın.

Diyalog örneği:
Kod:
set d = createobject ("shell.application").browseforfolder(0, "Klasör seçiniz..",0)
msgbox d.self.path

******************************************

i.mete:

Kod otomatik olarak yedeklemiyor. Bir olay ile tetiklenmesi gerekiyor. Bu, bir buton ya da Timer olabilir.

Kaynağa currentproject.fullname ile aktif proje belirtilmiş. Buraya "c:\???be.mdb" şeklinde kaynak gösterebilirsiniz.

Dosyanın bölünmesinden kastettiğiniz "link" ise, bu konuda henüz net fikrim yok. Anacak ADO ile tek dosyaya bağlanıyorsanız belirttiğim şekilde sorunu çözebilirsiniz.

Kolay gelsin.

<Zeki Gürsoy/>



  Alıntı
Bu mesajı beğenenler:
#6
Zeki bey çalışmanın bölünmesinden kasdettiğim, tabloların ayrı bir kısımda yani _be.mdb uzantılı diğeri de form,sorgu,rapor,makro ve modüllerin bulunduğu kısım yani mdb uzantılı olan.
Ben sizin kodu mdb uazntılı olan kısında çalıştırdığımda tabloların olduğu kısmı değilde diğer kısmı yedekliyor.İstiyorum ki tabloların olduğu kısmı yedeklesin.Mümkünse bana bahsettiğiniz şekilde düzenlenmiş olan yani zaman ayarlı (her saat 16:00 da yedekleyecek şekilde )halini gönderirseniz, bende sizin bu kodunuzu tabloların olduğu kısma ekleyeyim bir modül olarak ve hergün otomatik olarak yedeklemeyi sağlamış olurum.
İlgilenebilirseniz minnettar olurum zira kod bilgim hiç yok.
Hay. günler dilerim.



  Alıntı
Bu mesajı beğenenler:


Benzer Konular...
Konu: Yazar Cevaplar: Gösterim: Son Mesaj
access-sql-8 Access 2010'da Veri Güvenliği | Kapalı ve Şifreli Veritabanını Yönetmek Taruz 13 8.877 16-04-2012, 20:36
Son Mesaj: Mehmet Eser

Foruma Git:


Bu konuyu görüntüleyen kullanıcı(lar): 1 Ziyaretçi