[FORM] yedekleme ve bakım
#1
merhaba sitede bir çok örnek var yedekleme ve bakım ile ilgili ama benim yapmak istediğim forma koyduğum bir butonla ikisini aynı anda yaptırmak. yani butona tıkladığımda önce onarıcak ve ardından datebasenin olduğu yere yedek alıcak. kendi programımda kullandığım kodlar aşağıdadır. yedek konusunda ise her yedek aldığımda önceki yedeğin üzerine yazıyor ve bu şekilde kalmadı bence çok daha iyi. ikisini tek kodda yapmak mümkünmüdür.


onarma kodu:

Private Sub Resim287_DblClick(Cancel As Integer)
Dim msg As String
DoCmd.SelectObject acForm, "frmSearch", True
msg = "Lütfen Dikkat, veritabanında girdiğiniz kayıtlar tutulmaktadır. "
msg = msg & "Girdiğiniz ve/veya sildiğiniz kayıtlarla bu dosya zamanla gereksiz yere şişer."
msg = msg & "Bunun için [Veritabanı dosyası bakımı] işlemini en geç 7 günde bir yaparsanız, "
msg = msg & "gereksiz şişkinlikler dosyanızdan atılacak, dolayısıyla dosyanızın boyutu küçülecektir." & vbCrLf & vbCrLf
msg = msg & "Özellikle hafta sonları yedeklemelerden önce" & vbCrLf
msg = msg & "[Veritabanı dosyası bakımı] işlemini uygulamanız tavsiye edilir." & vbCrLf & vbCrLf
msg = msg & "Evet'i Seçerseniz...Programın Düzenlenip Onarılabilmesi için Kapatılması Gerekiyor " & vbCrLf & vbCrLf

msg = msg & "Şimdi veritabanı dosyanızın bakımını yapacak mısınız?" & vbCrLf & vbCrLf
If MsgBox(msg, vbQuestion + vbYesNo, "Veritabanı dosyası bakımı") = vbNo Then Exit Sub
'hayır denilirse ana menüye geri dönülüyor

Call DuzenleOnarYenile
End Sub

onarma modülü kodları:

Public Function DuzenleOnarYenile()
Dim scriptpath As String
scriptpath = Application.CurrentProject.FullName & ".dbrestart.bat"
If Dir(scriptpath, vbNormal) <> "" Then
If DateAdd("s", TIMEOUT * 2, FileDateTime(scriptpath)) < Date Then
Kill scriptpath
Else
Application.Quit acQuitSaveAll
Exit Function
End If
End If
Dim s As String
s = s & "SETLOCAL ENABLEDELAYEDEXPANSION" & vbCrLf
s = s & "SET /a counter=0" & vbCrLf
s = s & ":CHECKLOCKFILE" & vbCrLf
s = s & "ping 0.0.0.255 -n 1 -w 100 > nul" & vbCrLf
s = s & "SET /a counter+=1" & vbCrLf
s = s & "IF ""!counter!""==""" & TIMEOUT & """ GOTO CLEANUP" & vbCrLf
s = s & "IF EXIST ""%~f2.%4"" GOTO CHECKLOCKFILE" & vbCrLf
s = s & """%~f1"" ""%~f2.%3"" /compact" & vbCrLf
s = s & "start "" "" ""%~f2.%3""" & vbCrLf
s = s & ":CLEANUP" & vbCrLf
s = s & "del %0"
Dim intFile As Integer
intFile = FreeFile()
Open scriptpath For Output As #intFile
Print #intFile, s
Close #intFile
Dim dbname As String, ext As String, lockext As String, accesspath As String
Dim idx As Integer
accesspath = SysCmd(acSysCmdAccessDir) & "msaccess.exe"
For idx = Len(CurrentProject.FullName) To 1 Step -1
If Mid(CurrentProject.FullName, idx, 1) = "." Then Exit For
Next idx
dbname = Left(CurrentProject.FullName, idx - 1)
ext = Mid(CurrentProject.FullName, idx + 1)
If Left(ext, 2) = "ac" Then
lockext = "laccdb"
Else
lockext = "ldb"
End If
s = """" & scriptpath & """ """ & accesspath & """ """ & dbname & """ " & ext & " " & lockext
Shell s, vbHide
Application.Quit acQuitSaveAll
End Function

[/code]
yedek al ve kapa kodu:

Private Sub kapa_Click()


If MsgBox("KeSoKa Expert Revir programı kapatıp yedek alınsın mı ?", vbCritical + vbOKCancel) = vbOK Then

On Error Resume Next
Dim CurDB As String, KopiaDB As String, LenDB As Long, Plik As String, NrPliku As Long
DoCmd.Hourglass -1
CurDB = CurrentDb.Name
Err = 0
Plik = Space(FileLen(CurDB))
NrPliku = FreeFile
Open CurDB For Binary Access Read Shared As #NrPliku
Get #NrPliku, 1, Plik
Close #NrPliku
If Err = 52 Then
MsgBox "Kopyalanamadı. " & CurDB & "Kopyalama işlemi başarısız.", 48, "Kopyalanıyor."
ElseIf Err Then
MsgBox Err.Description
Else
KopiaDB = InputBox("Program yedeklenecek, Kayıt yeri aşağıdaki gibi:" & Chr(13) & Chr(10) & Chr(13) & Chr(10) & "Programın kaydedileceği yer:.", "KeSoKa---> Değiştirmeden onaylayınız.", Left(CurDB, Len(CurDB) - Len(Dir(CurDB))) & "Revir yedek.mdb")
If KopiaDB & "" <> "" Then
Kill KopiaDB
Err = 0
NrPliku = FreeFile
Open KopiaDB For Binary Access Write Shared As #NrPliku
Put #NrPliku, 1, Plik
Close #NrPliku
If Err = 0 Then
MsgBox "Yedek Dosyanız Alınmıştır."
Else
MsgBox Err.Description
End If
End If
End If
DoCmd.Hourglass 0
DoCmd.Close

DoCmd.OpenForm "KAPANIS"

Else
Me.Undo
MsgBox "işlemi iptal ettniz. Program çalışmaya devam ediyor."
End If
End Sub



  Alıntı
Bu mesajı beğenenler:
#2
dah basit yöntem ve de kodlarla çalışırsanız daha iyi yol alınır.

önce aynı dizine yedekleme aldırın. YedekleME oalrak artın ilgili kodu kullanın. Daha sonra aynı dizindedki AVT'yi canınız isterse onrma yaptırırsınız istemezse ziplersiniz.

Onrma için uğraşmaya gerek yok bence kullanıcı bilinçli olsun ayda bir defa onarsın eyter de artar bile.

Kapanışta say onar adlı bir örnek de var sitede. Herşeyi otomatiklermek kullancıyı zamanla etkisizleştirir. Bilinçli bir kullanıcı yaratmak gerek bu adkar kodun peşine düşmek yerine. Makineler asla insanlar kadar akıllı olamaz.
Eek VT:Veri Tabanı, AVT: Access VT, MS:Microsoft, Kapaç: Kapa ve aç (rebot ve açkapa saçmalığına çözümüm)
Twitcy Yazan okuyan sağolsun, çözene saygılar. Kolaylaştırınız, zorlaştırmayınız.
? Cinnet geçirmemek için Access 2010'u SP2 ile kullanalım.
? Sürekli sebepsiz hatalar oluyor da AVT uçuyorsa siz de Ofis kurulmunu uçurun çözülüyor. Sorun kurulum dosyanızda! Farklısını bulun!
? VT dağıtıma çıkana kadar bölmek zaman kaybıdır!
{ Veri Tabanı Mantığı } {Access 2010 çökmelerine çözüm } { 60 Günlük Ofis 2010 Pro Türkçe } { Kayıtları Yan Yana Göstermek }
{ Forma Rapora Resim Fotoğraf Eklemek En kolay En Sağlam En Zengin Teknik }



  Alıntı
Bu mesajı beğenenler:
#3
bi çok noktada haklısınız ama bazen onarım işlemi mecburiyet oluyor. örneğin benim hazıladığın programda tabloda yazan en son sayıyı otomatik aldırıyorum. kirlide koduyla. ama nasıl oluyorsa bazen o sayı takılıp kalıyor. atıyorum en son sayı 120 olsun bir dahakinde ve burda taklıp kalıyor aslında son kaydımın sayısı 125 olmuştur ama kirlide kodu bana 120 yi veriyor her yeni kayıtta. onarım yapmadan düzelmiyor.. bu yuzden her kapanışta hem yedek alıp hemde onarmasını düşünüyorum.



  Alıntı
Bu mesajı beğenenler:
#4
selam
araçlar\seçenekler\genel\sekmesinden kapatırken onar onay kutusunu işaretleyin
siz uugulamanızı her kapattığınızda sistem kendini onarıp kapatacaktır
yedekleme ise sayın mehmet beyin çok güzel bir kapanışta yedekle kodu var hem kısacık hem işlevi sizinkinden hızlı hata payıda az

saygılar



  Alıntı
Bu mesajı beğenenler:
#5
tşkler sayın aydın. dediğiniz gibi yapmak en mantıklısı sanırım. ben o kapanırken onar olayını unutmuşum :D



  Alıntı
Bu mesajı beğenenler:


Benzer Konular...
Konu: Yazar Cevaplar: Gösterim: Son Mesaj
  [VBA] Yedekleme Işlemi. ŞabanTR 2 344 25-05-2024, 20:22
Son Mesaj: ŞabanTR
  [VBA] Bulut Yedekleme hedefkaya 9 1.025 30-01-2023, 13:17
Son Mesaj: beab05
  [VBA] Bağlı Tablo Bakım Onarım hedefkaya 4 961 26-11-2021, 06:30
Son Mesaj: adnnfrm
  Access 2016 Uyumlu Otomatik Yedekleme Mr.Midnight 5 922 21-04-2021, 09:01
Son Mesaj: Mr.Midnight
  Tabloları Ilişki Olarak Yedekleme Kopyalama bibib 0 494 15-03-2021, 21:02
Son Mesaj: bibib
  Yedekleme Uygulamasındaki Fyedekleme Formu M_Kemal_Askeri 7 1.552 08-07-2020, 18:02
Son Mesaj: Davetsiz
  Bulut Yedekleme hedefkaya 0 509 26-11-2019, 13:44
Son Mesaj: hedefkaya
  [FORM] Bakım Plan Ve Takip Programı Hk. heyijet 2 2.117 16-03-2019, 16:08
Son Mesaj: dsezgin

Foruma Git:


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