0

专家您好,我在从 SQL Server 进行更新查询时遇到问题。首先运行一个选择查询,然后将结果传递给 currentdb.execute(以更新当前使用的访问文件的表),使用 Access vba 我做得不对。我真的希望你能帮助我。也许你们知道更好的方法来运行我的程序:

  1. 连接到 sql server 2008,运行选择查询。
  2. 将 select 查询的结果传递给 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
4

1 回答 1

0

您应该添加链接表(或传递查询)以从 SQL Server 获取数据,在 MDB 中创建更新查询,使用 JOIN 一次更新所有行(您可以使用查询设计器来完成这部分)然后使用 CurrentDb.Execute 执行该查询。

于 2013-06-20T18:22:26.373 回答