gooドクター有料プランが1ヶ月間無料!

こんにちは。
EXCEL2013からACCESS2013へデータを更新するvbaについて質問させてください。
https://infith.com/system/access/excel_access_ad …
こちらを参考にマクロを設定しました。

ACCESS テーブル名:T商品マスター
更新するためのフィールド:商品コード

EXCEL アクティブシートにあるA~C列2行目から最終行まで

変更した箇所
strSQL = "SELECT T商品マスター.* FROM T商品マスター " 
strSQL = strSQL & "WHERE T商品マスター.商品コード = " & CLng(.Cells(i, 1).Value) & " ;"

これを実行すると↓の部分でデバックになり、
抽出条件が一致しません、と表示されてしまいます。
'レコードセットを開く
adoRS.Open strSQL, adoCON, adOpenKeyset, adLockOptimistic

おそらく変更した箇所の書き方が違うのかなと思ったのですが
自分ではいくら考えてもわからず、よろしくお願いします。

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
Sub DB_Write()
Dim adoCON As New ADODB.Connection
Dim adoRS As New ADODB.Recordset
Dim strSQL As String
Dim odbdDB As Variant
Dim wSheetName As Variant
Dim i As Integer
Dim wLastGyou As Long

'カレントディレクトリのデータベースパスを取得
odbdDB = "C:\***\Desktop\売上管理.accdb"

'データベースに接続する
adoCON.ConnectionString = "provider=Microsoft.ACE.OLEDB.12.0;" _
& "Data Source=" & odbdDB & ""
adoCON.Open

'トランザクション開始
adoCON.BeginTrans

'アクティブなシート名を取得
wSheetName = ActiveSheet.Name

With Worksheets(wSheetName)

'最終行番号を取得
wLastGyou = .UsedRange.Rows.Count

'Excelの一覧を読み込みAccessに書き込む
For i = 2 To wLastGyou

'商品コードの数値チェック(数字の場合は処理を実行)
If .Cells(i, 1).Value <> "" Then

'DB接続用SQL
strSQL = "SELECT T商品マスター.* FROM T商品マスター "
strSQL = strSQL & "WHERE T商品マスター.商品コード = " & CLng(.Cells(i, 1).Value) & " ;"
'カーソルをクライアント側に設定
adoRS.CursorLocation = adUseClient
'レコードセットを開く
adoRS.Open strSQL, adoCON, adOpenKeyset, adLockOptimistic

'入力された商品コードと同一のレコードが無い場合は新規登録
If adoRS.EOF Then
adoRS.AddNew
adoRS!商品コード = CLng(.Cells(i, 1).Value)
End If

adoRS!商品コード = .Cells(i, 2).Value
adoRS!商品名 = .Cells(i, 3).Value
adoRS!単価 = .Cells(i, 3).Value

adoRS.Update

'レコードセットを閉じる
adoRS.Close: Set adoRS = Nothing

End If

Next i

End With

'トランザクション終了
adoCON.CommitTrans

'ADOコネクションオブジェクトのクローズ処理
adoCON.Close: Set adoCON = Nothing

End Sub

gooドクター

A 回答 (2件)

>T商品マスター.商品コード



がどんなデータ型なのかシートのA列がどうなっているのかがわかりませんけど、コード的には『ともに数値』であることが条件ですよね?
商品コードなので『A0001』とか『00225』とかの『文字列(数字≠数値)』ではないですか?
仮にそうなら、

strSQL = strSQL & "WHERE T商品マスター.商品コード = '" & .Cells(i, 1).Text & "' ;"

とかになるかもですが。
    • good
    • 0
この回答へのお礼

助かりました

ありがとうございます。
自分じゃ絶対たどり着けなかったので
神様のようで感激しました( ;∀;)

お礼日時:2019/12/02 14:32

strSQL = "SELECT T商品マスター.* FROM T商品マスター " 


strSQL = "SELECT * from T商品マスター " 
にしたらどうでしょう?
    • good
    • 0
この回答へのお礼

ありがとう

アドバイスありがとうございます。
解決にはならなかったのですが、こういう書き方もあるんだと勉強になりました。

お礼日時:2019/12/02 14:34

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

gooドクター

人気Q&Aランキング