office交流網--QQ交流群號

Access培訓群:792054000         Excel免費交流群群:686050929          Outlook交流群:221378704    

Word交流群:218156588             PPT交流群:324131555

VBA代碼調用Access數據庫繫統壓縮和修複數據庫功能

2004-07-30 05:14:00
版主們-Office交流網
原創
9197

如何用VBA代碼調用Access繫統壓縮和修複數據庫這一功能.
希望通過標籤的單擊事件調用繫統菜單中的壓縮和修複數據庫這一功能.

上傳箇文件:qPdhFMoU.rar

1.  ququ 最簡單的辦法  新增一箇菜單欄,把這箇命令拖到菜單內卽可

2. kunlun   在Access窗體上創建 建一箇標籤,在標籤的單擊事件中添加如下事件


Private Sub Text1_Click() 
    docmd.RunCommand acCmdCompactDatabase
    docmd.RunCommand acCmdRepairDatabase
end sub


3. Tmtony站長做的壓縮和修複數據庫函數 

Function Compact()  
 With CommandBars.Add(, msoBarFloating, , True)  
 Const CompactId As Long = 2071  
 .Controls.Add msoControlButton, CommandBars("Tools").Controls(7).CommandBar.Controls(2).Id  
 DoEvents  
 .Visible = True  
 .Controls(1).SetFocus  
 SendKeys "{ENTER}" '模擬擊鍵壓縮  
 End With  
End Function  


4. 李嘯林 修改後的函數

    可以適閤97與XP,我沒有安裝過ACCESS 2000,希望你們能給我補上。  


Dim ref As Reference  
Dim i As Byte  
Set ref = References!Access  
'我不用Application.Vertion是由於,這箇屬性在Access 97中不存在。  
Select Case ref.Major  
Case 8: i = 6 'Access 97  
Case 9: i = 7 'Access XP  
Case Else  
MsgBox "未知版本,無法使用此功能"  
Exit Sub  
End Select  
With CommandBars.Add(, msoBarFloating, , True)  
  
 .Controls.Add msoControlButton, CommandBars("Tools").Controls(i).CommandBar.Controls(2).Id  
 DoEvents  
 .Visible = True  
 .Controls(1).SetFocus  
 SendKeys "{ENTER}" '模擬擊鍵壓縮  
 End With  


5. zhengjialon  把這箇函數拷貝下窗體的模塊裡,然後在標籤的單擊事件裡寫:Compact


Function Compact()  
 With CommandBars.Add(, msoBarFloating, , True)  
 Const CompactId As Long = 2071    .Controls.Add msoControlButton, CommandBars("Tools").Controls(7).CommandBar.Controls(2).Id  
 DoEvents  
 .Visible = True  
 .Controls(1).SetFocus  
 SendKeys "{ENTER}" '模擬擊鍵壓縮  
 End With  
End Function  


6. guoya ngw123:連接錶壓縮方法建立一箇函數,然後在程序中調用


Function zipDB() 
  
    If Right(CurrentProject.Path, 1) <> "\" Then '判斷當前路徑 
        Y = CurrentProject.Path & "\" 
    Else 
        Y = CurrentProject.Path 
  End If 
    x = Y & "data_be.mdb"     'data_be.mdb爲後颱數據庫名稱 
          '取得路徑 
     If Dir(x) = "" Then 
     MsgBox "數據未找到" 
     Exit Function 
     ElseIf Dir(x) <> "" Then '確定文件存在 
       DBEngine.CompactDatabase x, Y & "temp.mdb", ";pwd=123", , ";pwd=123" '壓縮爲暫存文件 
      ' 假設後颱數據庫密碼爲"123"      Kill x '刪除原文件 
      FileCopy Y & "temp.mdb", x  '還原 
        Kill Y & "temp.mdb"   '刪除暫存文件 
     End If 
  MsgBox "完成修補及壓縮" 
End Function



ywg
謝謝huanghai問題解決瞭,總結一下和各位新手共衕學習:

1、用zhengjialon版主提供的Tmtony站長和李嘯林的方法,併在VBE的窗口中菜單欄,工具/引用裡請首選引用Microsoft Office X.0 Object Llbrary.這種方法應該適用於沒有拆分的數據庫(拆分後沒試過)。2、用guoya的方法適用於拆分過的數據庫。 



ngw123
如何壓縮修複連接錶呢....這箇無法通過鏈接錶來壓縮,必鬚 壓縮實際的鏈接數據庫文件

ywg
kunlun你好:      按你所説的方法,繫統提示齣錯,不能壓縮打開的數據庫,我是希望在界麵中屏避繫統菜單,在用戶窗體中,做一箇標籤,讓用戶通過單擊此標籤實現對本數據庫的壓縮與修複,(數據庫爲打開狀態).請幫我想想辦法.謝謝!

zhengjialon
http://www.office-cn.net/thread-17457-1-1.html

ywg
版主沒搞明白?能否詳細説明,"VBA"小弟真是不太認識牠



ywg
版主還是要麻煩你.繫統提示錯誤運行時錯誤'-2147467259(80004005)':方法'ADD'作用於對象'commandBarControls'時失敗

ngw123
連接錶如何壓縮呀..怎麽沒人迴答...是不是新建一箇access實冽,再打開連接錶,再壓縮..我去試試...


kunlun
這麽複雜,有沒有簡單一點呀。我頭都大瞭,看不懂瞭

ywg
還有那位能再次拉我一把呀!

zhengjialon
迴樓主:在VBE的窗口中菜單欄,工具/引用裡請首選引用Microsoft Office X.0 Object Llbrary

huanghai
找到要操作菜單的位置,然後用代碼執行,具體如:CommandBars("menu bar").Controls("工具(&T)").Controls("數據庫實用工具(&D)").Controls("壓縮和修複數據庫(&C)...").Execute

ywg在 
huanghai按你所説的方法,繫統提示齣錯,不能壓縮打開的數據庫.


ywg
guoya你所提供的方法,我經試驗髮現如果是在沒有用戶登陸及密碼的數據庫中可以正常使用,但如果是在有用戶登陸及密碼的數據庫中在壓縮後會齣現錯誤提示運行時錯誤‘3031’密碼無效guoya及各位高手能否幫忙解決這箇問題。

guoya
後颱數據是不應該有安全機製的呀

ywg
沒有用繫統的安全機製,但有用VBA代碼的用戶登陸密碼,拆分後的後颱數據庫的密碼爲123而前颱窗體打開時會齣現密碼無效的錯誤,應如何解決呢?去掉代碼中的pwd=123", , ";pwd=123"可以嗎?DBEngine.CompactDatabase x, Y & "temp.mdb", ";pwd=123", , ";pwd=123" '壓縮爲暫存文件
      ' 假設後颱數據庫密碼爲"123"

(設置_安全_修複-相關文章技巧鏈接):
ACCESS數據庫RunCommand方法蔘數列錶説明説明

分享