2013-05-21 67 views
1

我想通過*.mdb文件的目錄遞歸運行並搜索它們以查看哪些文件具有特定的鏈接表。使用VBA打開由mdw文件保護的ms-access數據庫時,按住SHIFT鍵時按下按鈕?

這些文件使用幾個*.mdw文件進行保護。我沒有寫他們中的任何一個,但我是他們的維護者。

我已經found a way to do this,但它太互動;我需要它是非互動的;因爲我正在搜索的這些*.mdb中的一些使用Autoexec宏。

從我理解執行一個Autoexec宏可以避免,如果一個人打開他們時,持有SHIFT鍵;但是我使用command linemy macro來打開這些文件,而且似乎沒有辦法保持shift鍵。

我找到了另一個例子,which does allow you to hold down the shift key to avoid the Autoexec macro(見繞過啓動設置當打開數據庫),但讓你解開與*.mdw文件數據庫,因爲OpenCurrentDatabase()方法不有一個*.mdw文件的參數

回答

3

如果您的目標僅僅是檢查db文件是否包含特定的鏈接表,則可以使用ADO OpenSchema方法。使用這種方法,您不需要在Access應用程序會話中打開數據庫文件,因此AutoExec宏不會運行。

以下是使用後期綁定的示例。如果你更喜歡早期的綁定,我留下了評論筆記。更改提供商如果你的Access版本早於2007年

由於您使用Access用戶級安全性,還必須適應連接字符串包含路徑到您的MDW並提供安全的訪問用戶名和密碼。以下是來自ConnectionStrings.com的示例連接字符串(使用Jet 4提供程序)。我分裂的分號的可讀性單行字符串:

Provider=Microsoft.Jet.OLEDB.4.0; 
Data Source=C:\mydatabase.mdb; 
Jet OLEDB:System Database=system.mdw; 
User ID=myUsername; 
Password=myPassword; 

Public Function HasLinkedTable(ByVal pDb As String, _ 
     ByVal pTable As String) As Boolean 

    Const adSchemaTables = 20& 
    Dim cn As Object ' ADODB.Connection 
    Dim rs As Object ' ADODB.Recordset 
    Dim strConnect As String 
    Dim blnReturn As Boolean 

    strConnect = "Provider=Microsoft.ACE.OLEDB.12.0;" & _ 
     "Data Source=" & pDb & ";" 
    'Set cn = New ADODB.Connection 
    Set cn = CreateObject("ADODB.Connection") 
    cn.Open strConnect 

    Set rs = cn.OpenSchema(adSchemaTables) 
    With rs 
     Do While Not .EOF 
      If !TABLE_NAME = pTable And !TABLE_TYPE = "LINK" Then 
       'Debug.Print !TABLE_NAME, !TABLE_TYPE 
       blnReturn = True 
       Exit Do 
      End If 
      .MoveNext 
     Loop 
     .Close 
    End With 
    cn.Close 
    Set cn = Nothing 
    HasLinkedTable = blnReturn 
End Function 
+0

哪裏的用戶名和密碼?我沒有在代碼清單中看到它...... – leeand00

+0

+ +1爲一個更加優雅的方法,然後我正要建議。 (這是荷馬辛普森在[在家工作]時使用的一個變體(http://en.wikipedia.org/wiki/King-Size_Homer),並且對他來說變得不那麼好)。 –

+0

(荷馬用一隻[飲鳥](http://en.wikipedia.org/wiki/Drinking_bird)爲他打出「Y」鍵,這樣他就不必費心回答那些煩人的「你確定嗎?」(是/否)「提示。) –