PDA

View Full Version : compact and repair کردن فایل Back end



hamid-nice
سه شنبه 06 فروردین 1392, 11:15 صبح
سلام دوستان

چطور می شه از داخل فایل Front با زدن یک دگمه فایل Back End که جداول بهش لینک هست را

compact and repair کرد ؟

با تشکر

hamid-nice
چهارشنبه 07 فروردین 1392, 22:53 عصر
سلام
راه حل پیدا شد :

این راه حل را از یک تاپیک که جناب M.T.P قرار داده اند آوردم و به صورت یک فایل درست کردم :
در درایو D ، فایل ضمیمه را Extract کنید

با اجرای Macro1 فایل database که جداول به آن لینک شده compact میشود و فیلد Kode که AutoNumber هست از آخرین عدد شروع به شماره گذاری میکنه

اما یک سوال هست که اگر یک فرم دیگری بسازیم که رکورد های جدول را نمایش بده و فرم باز باشه (که در اینصورت جدول باز هست ) اگر دگمه Compact with macro که ماکرو را اجرا می کنه را بزنیم برنامه پیغام می ده که جدول باز هست و نمی شه compact کرد

یا به هر حال کاری کنه که دگمه Compact with macro وقتی هر دو فرم باز هستند عمل کنه ؟

hamid-nice
پنج شنبه 08 فروردین 1392, 01:17 صبح
یک راهی هم هست که compact on close را در فایل Back End تیک بزنیم تا موقع بازو و بسته شدن این فایل ، این کار انجام بشه

اما من از داخل فایل Front End یک دستور نوشتم که فایل Back End را باز وبسته کنه ولی عمل compact انجام نمی شه در حالی که وقتی مستقیم فایل Back End را باز و بسته می کنم عمل compact انجام می شه

کسی می دونه علت چیه ؟
و اینکه به این روش چطور می شه این کار را انجام داد ؟

با تشکر

hamid-nice
یک شنبه 11 فروردین 1392, 20:33 عصر
اساتید محترم کسی پاسخگو هست که چطور می شه فایل Back End را از داخل فایل Front End باز وبسته کرد که عمل
Compact and repair در آن انجام گیرد (تیک compact on close را هم در فایل Back End زده ایم؟

با تشکر

Abbas Amiri
دوشنبه 12 فروردین 1392, 00:12 صبح
اساتید محترم کسی پاسخگو هست که چطور می شه فایل Back End را از داخل فایل Front End باز وبسته کرد که عمل
Compact and repair در آن انجام گیرد (تیک compact on close را هم در فایل Back End زده ایم؟

با تشکر

نمونه لینک زیر بخوبی کار می کند
http://stackoverflow.com/questions/1460129/ms-access-how-to-compact-current-database-in-vba

hamid-nice
دوشنبه 12 فروردین 1392, 16:02 عصر
سلام

با تشکر از لینکی گذاشتید ولی من هر کدوم را که به کار بردم یه اروری داد اگه ممکنه یک نمونه ضمیمه کنید

با تشکر

Abbas Amiri
سه شنبه 13 فروردین 1392, 00:06 صبح
تابعی که آستفاده کردم . قسمتهای زائد مثل پیغامها را میتوانید حذف کنید



Sub CompactBackendFile()
Dim sDataFile As String, sDataFileTemp As String, sDataFileBackup As String
Dim s1 As Long, s2 As Long

sDataFile = "C:\MyDataFile.mdb" 'Your Backend File
sDataFileTemp = "C:\MyDataFileTemp.mdb" 'Temrorary File > Address not Important
sDataFileBackup = "C:\MyDataFileBackup " & _
Format(Now, "YYYY-MM-DD HHMMSS") & ".mdb" ' Name of Backup File >> if backend file damaged
DoCmd.Hourglass True

'get file size before compact
Open sDataFile For Binary As #1
s1 = LOF(1)
Close #1

'backup data file
FileCopy sDataFile, sDataFileBackup

'only proceed if data file exists
If Dir(sDataFileBackup, vbNormal) <> "" Then

'compact data file to temp file
On Error Resume Next
Kill sDataFileTemp
On Error GoTo 0
DBEngine.CompactDatabase sDataFile, sDataFileTemp

If Dir(sDataFileTemp, vbNormal) <> "" Then
'delete old data file data file
Kill sDataFile

'copy temp file to data file
FileCopy sDataFileTemp, sDataFile

'get file size after compact
Open sDataFile For Binary As #1
s2 = LOF(1)
Close #1

DoCmd.Hourglass False
MsgBox "Compact complete " & vbCrLf & vbCrLf _
& "Size before: " & Round(s1 / 1024 / 1024, 2) & "Mb" & vbCrLf _
& "Size after: " & Round(s2 / 1024 / 1024, 2) & "Mb", vbInformation
Else
DoCmd.Hourglass False
MsgBox "ERROR: Unable to compact data file"
End If

Else
DoCmd.Hourglass False
MsgBox "ERROR: Unable to backup data file"
End If

DoCmd.Hourglass False
End Sub