PDA

View Full Version : سوال: کد نویسی برای Compact & Repair دیتابیس Access 2007 (همراه عکس)



gilsoft
چهارشنبه 19 مهر 1391, 11:25 صبح
سلام دوستان
ابتدا به عکس نگاه کنید :

93784

چه جوری میتونم این کار رو با کدنویسی تو محیط VB.NET انجام بدم ؟ :متفکر:

اگه میشه یه راهنمایی کوچولو بکنید

ممنونم

Nima7887
چهارشنبه 19 مهر 1391, 12:18 عصر
البته من امتحان نكردم
اما بايد از اين استفاده كنيد
DBEngine.CompactDatabase

يه نمونه اينجاست
http://www.developerfusion.com/code/4142/compact-repair-ms-access-database/

اينجا رو هم نگاه كن
http://msdn.microsoft.com/en-us/library/bb237197%28v=office.12%29.aspx
http://social.msdn.microsoft.com/Forums/en-US/vbgeneral/thread/9122c7d0-ecc9-4848-afe3-cb7d07a74480

sehm67
چهارشنبه 22 آذر 1391, 04:51 صبح
سلام

کد زیر رو داخل ماژول بنویسید :


Public Function CompactAccess2007(ByVal sDatabase As String) As Boolean
On Error GoTo EndLine
Dim blnRet As Boolean
Dim ObAccess As Object
Dim StrTmp As String
Dim StrSrc As String
blnRet = False
ObAccess = CreateObject("DAO.DBEngine.120")
StrSrc = sDatabase
StrTmp = sDatabase & "x"
Call SetAttr(StrSrc, vbNormal)
Call ObAccess.CompactDatabase(StrSrc, StrTmp, , , ";pwd=")
Call Kill(StrSrc)
Rename(StrTmp, StrSrc)
ObAccess = Nothing
blnRet = True
EndLine:
CompactAccess2007 = blnRet
If Err.Number Then Call MsgBox(Err.Description, vbExclamation)
End Function

کد زیر داخل button :


If oledbConnection1.State = ConnectionState.Open Then oledbConnection1.Close()
CompactAccess2007(Application.StartupPath + "\Database.accdb")

موفق باشید

zahedi121
پنج شنبه 26 بهمن 1391, 12:15 عصر
سلام
اگر امکان داره کدهای بالا را توضیح بدید.
--
یک مشکل دیگر هم هست کد فوق به شرطی autonumber های حذف شده را کنار میگذاره که آخرین رکورد باشند ، مثلا فرض کنید id code اتونامبر باشه و تا 50 رفته باشه اگر ردیفهای 48 تا 50 را حذف کنیم کد بالا و کلا کامپکت دیتابیس اتونامبر را از 48 شروع میکنه ولی اگر مثلا ردیفهای 35 و 36 را حذف کنیم ، رکوردهای بعدی تغییر نکرده و اتونامبر از 51 شروع میشه. حالا چطور میشه این موضوع را هم حل کرد که اگر از وسط رکورد حذف کنیم بقیه ردیفها هم تغییر کند.