访问 SQL Server 的 VBA 查询
Posted
技术标签:
【中文标题】访问 SQL Server 的 VBA 查询【英文标题】:Access VBA query to SQL Server 【发布时间】:2013-06-20 12:39:19 【问题描述】:各位专家,我在从 SQL Server 进行更新查询时遇到问题。首先运行一个选择查询,然后将结果传递给 currentdb.execute(以更新当前使用的访问文件的表),使用 Access vba 我做得不对。我真的希望你能帮助我。也许你们知道更好的方法来运行我的程序:
-
连接到 sql server 2008,运行选择查询。
将选择查询的结果传递给 access 数据库执行命令(或者如果您有更好的主意)以更新当前正在使用的 access 文件中的表。
我遇到的代码错误是类型不匹配并突出显示 .OpenSchema。
这些是我写错的部分代码(我真的不知道该怎么做)。
dbObj.Execute ("UPDATE ACCESS.tbl_Name RIGHT JOIN " & _
conn.OpenSchema(adSchemaTables, Array(Empty, Empty, Empty, "SQLSVR.tbl_Name")) & _
" ON ACCESS.tbl_Name.FieldName_access = " & rst!FieldName_sqlsvr & _
" SET ACCESS.tbl_Name.FieldName_access = " & rst!FieldName_sqlsvr)
这是完整的代码。
Option Compare Database
Sub LocalSQLServerConn_Test()
Dim dbOjb As DAO.Database
Dim strDBName As String
Dim strUserName As String
Dim strPassword As String
Set dbObj = CurrentDb()
Set conn = New adodb.Connection
Set rst = New adodb.Recordset
strDBName = "DataSet"
strConnectString = "Provider = SQLOLEDB.1; Integrated Security = SSPI; " & _
"Initial Catalog = " & strDBName & "; Persist Security Info = True; " & _
"Workstation ID = ABCDE12345;"
conn.ConnectionString = strConnectString
conn.Open
strSQL = "SELECT DISTINCT SQLSVR.tbl_Name.FieldName_sqlsvr FROM SQLSVR.tbl_Name"
rst.Open Source:=strSQL, ActiveConnection:=conn, _
CursorType:=adOpenDynamic, LockType:=adLockOptimistic
If rst.RecordCount = 0 Then
MsgBox "No records returned"
Else
rst.MoveFirst
Do While Not rst.EOF
dbObj.Execute ("UPDATE ACCESS.tbl_Name RIGHT JOIN " & _
conn.OpenSchema(adSchemaTables, Array(Empty, Empty, Empty, "SQLSVR.tbl_Name")) & _
" ON ACCESS.tbl_Name.FieldName_access = " & rst!FieldName_sqlsvr & _
" SET ACCESS.tbl_Name.FieldName_access = " & rst!FieldName_sqlsvr)
rst.MoveNext
Loop
End If
conn.Close
rst.Close
Set dbObj = Nothing
End Sub
【问题讨论】:
如果您只是想更新 ACCESS.tbl_Name,您就不能完全放弃 RIGHT JOIN 并拥有“UPDATE ... SET ...”吗? (我不是这方面的专家。) 【参考方案1】:您应该添加链接表(或传递查询)以从 SQL Server 获取数据,在 MDB 中创建更新查询,使用 JOIN 一次更新所有行(您可以使用查询设计器这部分),然后使用 CurrentDb.Execute 执行该查询。
【讨论】:
以上是关于访问 SQL Server 的 VBA 查询的主要内容,如果未能解决你的问题,请参考以下文章
在 Access 中使用 ODBC 连接到 MS SQL Server 2012:手动调用查询和在 VBA 中调用查询之间的巨大时间差异
VBA/SQL ACCESS:将查询结果复制到其他访问数据库中的表
SQL Server 存储过程向其调用者报告进度,一个 Access (VBA DAO) 传递查询