2013-05-21 41 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”键,这样他就不必费心回答那些烦人的“你确定吗?”(是/否)“提示。) –