如何使用VBA从MS-Excel(2010)查询MS-Access表

Bry*_*yan 13 excel ms-access vba

我试图在Excel中编写一些vba代码来查询Access中的表.我已经为此尝试了多个代码示例,例如添加的链接,它们似乎都在"打开连接"部分失败了.我试过使用不同的引用,但我不确定我应该使用哪些,不同版本之间的区别是什么(即Microsoft ActiveX Data Objects 2.0,2.1,...,6.0)或提供者信息是什么应该.对于提供者信息,我通常会看到类似的东西

"Provider = Microsoft.Jet.OLEDB.4.0;数据源="

但我不确定这是否是我需要使用的,或者为什么/上面显示的提供程序字符串中的任何内容应该更改.有人可以教我如何正确地做这种事吗?

注意:如果可能的话,我想要一个无需下载任何其他应用程序即可运行的解决方案,并且适用于2007和2010版本的Access和Excel,因为这需要在具有可能不同版本的办公室的不同计算机上运行.

类似问题的链接: 要访问的Excel VBA查询失败 http://www.mrexcel.com/forum/showthread.php?t=527490

码:

Sub asdf()

strFile = "C:\Users\bwall\Desktop\Excel Query Access Testing"

Dim cn As Object
Dim rs As Object
Dim strSql As String
Dim strConnection As String
Dim AppPath As String
Set cn = CreateObject("ADODB.Connection")
AppPath = Application.ActiveWorkbook.Path


strConnection = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
    "Data Source=" & AppPath & "\Masterlist_Current_copy.accdb;"
Debug.Print strConnection
strSql = "SELECT [Neptune Number],[Description],[Manufacturer],[Manufacturer P/N] FROM [All Components];"
cn.Open strConnection
Set rs = cn.Execute(strSql)
MsgBox rs.Fields(0) & " rows in MyTable"
rs.Close
Set rs = Nothing
cn.Close
Set cn = Nothing

End Sub  
Run Code Online (Sandbox Code Playgroud)

strConnection值=

Provider = Microsoft.Jet.OLEDB.4.0; Data Source = C:\ Users\bwall\Desktop\Excel Query Access Testing\Masterlist_Current_copy.accdb;

Han*_*sUp 20

Provider=Microsoft.ACE.OLEDB.12.0如果您的目标数据库是ACCDB格式,那么Provider必须是. Provider=Microsoft.Jet.OLEDB.4.0仅适用于较旧的MDB格式.

如果您运行的是32位Windows,则甚至不需要安装Access.Jet 4作为操作系统的一部分包含在内.如果您使用的是64位Windows,则不包括Jet 4,但您仍然不需要安装Access本身.您可以安装Microsoft Access数据库引擎2010可再发行组件.确保下载匹配的版本(32位Windows的AccessDatabaseEngine.exe或64位的AccessDatabaseEngine_x64.exe).

您可以通过使用后期绑定来避免关于哪个ADO版本引用的问题,这不需要任何引用.

Dim conn As Object
Set conn = CreateObject("ADODB.Connection")
Run Code Online (Sandbox Code Playgroud)

然后将ConnectionString属性分配给conn对象.这是一个快速示例,它从Excel 2003中的代码模块运行,并显示一个带有MyTable行数的消息框.它使用后期绑定ADO连接和记录集对象,因此不需要设置引用.

Public Sub foo()
    Dim cn As Object
    Dim rs As Object
    Dim strSql As String
    Dim strConnection As String
    Set cn = CreateObject("ADODB.Connection")
    strConnection = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
        "Data Source=C:\Access\webforums\whiteboard2003.mdb"
    strSql = "SELECT Count(*) FROM MyTable;"
    cn.Open strConnection
    Set rs = cn.Execute(strSql)
    MsgBox rs.fields(0) & " rows in MyTable"
    rs.Close
    Set rs = Nothing
    cn.Close
    Set cn = Nothing
End Sub
Run Code Online (Sandbox Code Playgroud)

如果此答案无法解决问题,请编辑您的问题以向我们显示您尝试使用的完整连接字符串以及您为该连接字符串作出响应的确切错误消息.

  • Provider = Microsoft.Jet.OLEDB.4.0不适用于ACCDB.您需要ACE提供程序,如我在答案第一段中所述. (4认同)

小智 6

Sub Button1_Click()
Dim cn As Object
    Dim rs As Object
    Dim strSql As String
    Dim strConnection As String
    Set cn = CreateObject("ADODB.Connection")
    strConnection = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
        "Data Source=C:\Documents and Settings\XXXXXX\My Documents\my_access_table.accdb"
    strSql = "SELECT Count(*) FROM mytable;"
    cn.Open strConnection
    Set rs = cn.Execute(strSql)
    MsgBox rs.Fields(0) & " rows in MyTable"

    rs.Close
    Set rs = Nothing
    cn.Close
    Set cn = Nothing

End Sub
Run Code Online (Sandbox Code Playgroud)