Microsoft Access 掲示板

Excelから、ACCESSの更新クエリを実行したい

2 コメント
views
4 フォロー

Sub Test3()

    Dim DBpath As String
    Dim adoCn As Object
    Dim strSQL As String

    Set adoCn = CreateObject("ADODB.Connection")
    DBpath = ThisWorkbook.Path & "\tes.accdb"
    adoCn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & DBpath & ";"
       Dim i As Long
       i = 2

       With rs
       Do Until Cells(i, 1) = ""

       strSQL = "UPDATE MT_社員 SET 身長='" & Cells(i, 3) & "WHERE ID=" & Cells(i, 1).Value & ""

      Loop
      End With
      adoCn.Execute strSQL 'SQLを実行

    adoCn.Close
    Set adoCn = Nothing

End Sub

ExcelのVBAから、ACCESSのフィールドを更新したいのです。
MT_社員の構造
ID⇒主キー
名前⇒文字型
身長⇒数値型

このようになっています。
ACCESSでは、身長が空欄です。

Excelには、ID、名前、身長が入力されています。
IDに基づいて、身長のフィールドを更新したいのです。

上記のコードを実行すると、無限ループなのでしょうか?
処理が終わりません。

お手数ですが、ご教示をお願いします。画像1

hideki
作成: 2021/07/10 (土) 16:49:31
通報 ...
1

無限ループですね。

Accessのテーブルを更新する場合、レコードセットを利用する方法と、更新クエリを利用する方法があります。

rsという変数がレコードセットの意味だとしたら、上記の異なる方法の解説サイトを理解せずに適当にくっつけた感じのコードですね。

とりあえず下記でどうでしょうか。

     Dim i As Long
     i = 2

     Do Until Cells(i, 1) = ""
         ’下のSQLがおかしかったので修正
         strSQL = "UPDATE MT_社員 SET 身長=" & Cells(i, 3) & " WHERE ID=" & Cells(i, 1).Value
         adoCn.Execute strSQL 'SQLを実行 1行ずつ実行する必要あり
         i = i + 1 '次の行に進める これがないと無限ループ
    Loop

    adoCn.Close
    Set adoCn = Nothing

End Sub
2
hideki 2021/07/10 (土) 19:41:36 a106b@96514

ありがとうございました。
できました。