0

こんにちは専門家 SQL Server からの更新クエリで問題が発生しています。最初に選択クエリを実行し、その結果を currentdb.execute に渡します (現在使用しているアクセス ファイルのテーブルを更新するため)。Access 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

End Sub
4

1 に答える 1

0

リンク テーブル (またはパススルー クエリ) を追加して SQL Server からデータを取得し、MDB で更新クエリを作成し、JOIN を使用してすべての行を一度に更新する必要があります (この部分にはクエリ デザイナーを使用できます)。次に、CurrentDb.Execute を使用してそのクエリを実行します。

于 2013-06-20T18:22:26.373 に答える