2013-06-20 149 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執行該查詢。