VB.Net
透過
JRO
Compact / Repair
Access MDB<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
Imports
System
Imports
System.IO
Public
Class Form1
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
'
將
C:\db1.mdb
做
Compact / Repair
If Compact_MDB("C:\db1.mdb") Then MessageBox.Show("OK !")
End Sub
Private Function Compact_MDB(ByVal strFile As String) As Boolean
' Jet Access (MDB)
連線字串
; Jet ( Joint Engine Technology )
Dim strCn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0}"
'
或
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Jet OLEDB:Engine Type=5"
' Path.GetTempFileName
方法
:
在磁碟上建立具命之零位元組的唯一暫存檔案,
'
然後傳回該檔案的完整路徑。
Dim strTmpFile As String = Path.GetTempFileName.Replace(".tmp", ".mdb") '
把
tmp
副檔名改成
mdb
'
建立物件陣列存放引數
(
參數
) ,
來源
,
目的
Dim objPara As Object() = New Object() {String.Format(strCn, strFile), String.Format(strCn, strTmpFile)}
' Activator
成員
:
包含本機或遠端建立物件型別的方法,或者取得對現有遠端物件的參考。
' Activator.CreateInstance
方法
(Type) :
使用最符合指定參數的建構函式,建立指定型別的執行個體。
Dim objJRO As Object = Activator.CreateInstance(Type.GetTypeFromProgID("JRO.JetEngine"))
' Type.GetTypeFromProgID
方法
:
取得與指定的程式識別項
(ProgID)
關聯的型別;
'
如果在載入
Type
時發生錯誤,則傳回
null
。
' JRO.JetEngine
為
Microsoft Jet and Replication Objects X.X library
' Type.InvokeMember
方法
' Type.InvokeMember (String, BindingFlags, Binder, Object, Object[])
objJRO.GetType.InvokeMember("CompactDatabase", Reflection.BindingFlags.InvokeMethod, _
Nothing, objJRO, objPara)
'
使用指定的繫結條件約束並符合指定的引數清單,來叫用指定的成員。
' BindingFlags
列舉型別
,InvokeMethod
指定要叫用方法。
File.Delete(strFile) ' File.Delete
方法
:
刪除
Compact
前之
mdb
檔
File.Move(strTmpFile, strFile) ' File.Move
方法
:
將
Compact
過的
mdb
檔改成
(
回
)
正確檔名
' Marshal.ReleaseComObject
方法釋放
JRO COM
物件
Runtime.InteropServices.Marshal.ReleaseComObject(objJRO)
objJRO = Nothing
Return True
End Function
End
Class
================================================================
相關主題參考
:
關於 Access MDB 修復 ( 修復及壓縮 ACCESS 的 MDB )
转载于:https://blog.51cto.com/skyapple/19790