Microsoft Access 掲示板

Excelから、ACCESSの更新について / 10

20 コメント
views
4 フォロー
10
hiroton 2024/10/30 (水) 10:40:44 1ba09@f966d >> 8

SQLを実行している部分を書き換えます

Sub 単価転送()
    
    Dim DBpath As String
    Dim adoCn As Object
    Dim strSQL As String
    Dim henDB As String
    Dim i As Long
    Dim ws_2 As Worksheet
    Set ws_2 = Worksheets("転送用シート")
    henDB = Worksheets("Sheet1").Range("D1")
    
    Set adoCn = CreateObject("ADODB.Connection")
    DBpath = ThisWorkbook.Path & henDB  ' パスを確認
    adoCn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & DBpath & ";"
    
    With ws_2
     
     i = 2

     Do Until .Cells(i, "K") = ""
         strSQL = "UPDATE Q_単価更新用 SET 仕入=" & .Cells(i, "I") & " WHERE  更新合成キー ='" & .Cells(i, "K").Value & "'"
         
'// ここを調査用のコードに書き換える
'         adoCn.Execute strSQL

Dim RecordsAffected As Long
adoCn.Execute strSQL, RecordsAffected
If RecordsAffected = 0 Then
    Debug.Print strSQL
    Stop
End If
'//ここまで

         i = i + 1
    Loop
    End With
    adoCn.Close
    Set adoCn = Nothing
End Sub

RecordsAffected

省略可能です。 この操作の影響を受けたレコード数をプロバイダーが返す長整数型 ( Long ) の値です。

ヘルプによればRecordsAffectedにUPDATEで更新されたレコード数が入るはずなので、期待通り更新されれば「1」、更新されなければ「0」となっているはずなので、「0」の時だけイミディエイトウィンドウにstrSQLの値を書き出し、つづくStop行でVBAの実行が中断されます

または、Stop行は記述せずに、iの値と合わせてすべて処理させてから確認してもいいでしょう

Dim RecordsAffected As Long
adoCn.Execute strSQL, RecordsAffected
If RecordsAffected = 0 Then
    Debug.Print i; strSQL
End If

イミディエイトウィンドウの表示は100行までなので、「うまく更新されないデータ」が100件を超える場合は注意してください

通報 ...