2013-06-20 148 views
0

您好专家我在SQL Server的更新查询中遇到问题。首先运行select查询,然后将结果传递给currentdb.execute(用于更新当前正在使用的访问文件的表),使用Access vba我不正确。我真的希望你能帮助我。也许你们知道更好的方式来运行我的程序:错误:访问SQL Server的VBA查询

  1. 连接到sql server 2008,运行select查询。
  2. 将选择查询的结果传递给访问数据库执行命令(或者如果您有更好的想法)更新当前正在使用的访问文件中的表。

我得到的代码错误是类型不匹配,并突出显示.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 

末次

+0

如果你只是想更新ACCESS.tbl_Name,难道你不完全放弃RIGHT JOIN并有“UPDATE ... SET ...”吗? (我不是这方面的专家。) – Richard

回答

0

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