[[20211012174310]] 『「演算子がありません。」のエラーを修正したい。』(佐々木) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『「演算子がありません。」のエラーを修正したい。』(佐々木)

お世話になります。
下記のサイトを参考にExcelVBAからAccessにデータ更新するプログラムを作成したいと考えております。
https://tonari-it.com/excel-vba-access-update-records/

プログラムを実行したら「演算子がありません。」とエラーが出ました。
おそらくExcelのD列のフィールドは文字列型のデータであるからだと思い

 『ws.Range("D1").Value & "=" & ws.Cells(i, 4).Value & "," & _』 を
 『ws.Range("D1").Value & "=" '& ws.Cells(i, 4).Value &' "," & _』 に変更しましたが同じエラーが出ました。

どこを変更すればよいでしょうか?

 Option Explicit

 Sub データ更新()

 Dim Updatesht As Worksheet
 Set Updatesht = ThisWorkbook.Worksheets("Sheet1")

 Dim adoCON As New ADODB.Connection
 adoCON.ConnectionString = "provider=Microsoft.ACE.OLEDB.12.0;" & _
                            "Data Source=" & "C:\Users\my-note\Desktop\新しいフォルダー\test\test.accdb" & ";"
 adoCON.Open

 Dim adoRs As Object
 Set adoRs = CreateObject("ADODB.Recordset")

 Dim strSQL As String

 Dim i As Long
 i = 2

 Do While seibutsuUpdatesht.Cells(i, 1).Value <> ""

    strSQL = _
        "UPDATE T_データ更新 " & _
        "SET " & _
            Updatesht.Range("E1").Value & "=" & Updatesht.Cells(i, 5).Value & "." & _
            Updatesht.Range("G1").Value & "=" & Updatesht.Cells(i, 7).Value & "." & _
        " WHERE ID = " & Updatesht.Cells(i, 1).Value

    adoCON.Execute strSQL
    i = i + 1

 Loop

 adoCON.Close

 Set adoCON = Nothing

 End Sub

< 使用 Excel:Excel2019、使用 OS:Windows10 >


 UPDATE
     T_データ更新
 SET
     [E1]=[E2].[G1]=[G2].  ←ココが意味不明になっちゃってるんだと思います。
 WHERE                       (実際、私にも求める構文の推測すらできません。これでは)
     ID = [A2]

 [テーブル名].[カラム名] = [テーブル名].[カラム名]

 か、

 [カラム名] = [カラム名],[カラム名] = [カラム名]

 のどちらかじゃないのかな? 程度の予想しか...

(白茶) 2021/10/12(火) 19:03


 参考にされたページとほぼほぼ同じ事をなさろうとしているのであれば

    "SET " & _
        Updatesht.Range("E1").Value & "=" & Updatesht.Cells(i, 5).Value & "," & _
        Updatesht.Range("G1").Value & "=" & Updatesht.Cells(i, 7).Value & _
    " WHERE ID = " & Updatesht.Cells(i, 1).Value

 という感じでしょうか...ね? (たぶんですけど^^;)

(白茶) 2021/10/12(火) 19:35


 白茶さんご返信ありがとうございます。

 > UPDATE
      T_データ更新
  SET
      [E1]=[E2].[G1]=[G2].  ←ココが意味不明になっちゃってるんだと思います。
  WHERE                       (実際、私にも求める構文の推測すらできません。これでは)
      ID = [A2]

 Excelのシートはこのような感じで、 [フィールド名]=[値] となっています。E列のフィールドは更新できますが、G列が更新 
 出来ない状態です。

    |___A____B__________C______D______E_________F______G___   
1   |  ID  分類    名前 担当者 評価1   評価2  販売店
    |
2   |  1 おもちゃ ぬいぐるみ  119     1         2   aaa店
    | 2 おもちゃ ラジコン   120     2         2     bbb店
3   |
                              :
                              :

 "SET " & _
        Updatesht.Range("E1").Value & "=" & Updatesht.Cells(i, 5).Value & "." & _  
        Updatesht.Range("G1").Value & "=" & Updatesht.Cells(i, 7).Value & _
    " WHERE ID = " & Updatesht.Cells(i, 1).Value

 ↑の"."を","に修正しましたら、エラーが『一つ以上の必要なパラメータの値が設定されていません』になってしまいました。
 フィールド名とテーブル名が間違っていない場合、他の原因はなんでしょうか?

(佐々木) 2021/10/13(水) 12:14


                                                                           ↓ココはピリオドじゃなくてカンマですね
 "SET " & _
        Updatesht.Range("E1").Value & "=" & Updatesht.Cells(i, 5).Value & "." & _  
        Updatesht.Range("G1").Value & "=" & Updatesht.Cells(i, 7).Value & _
    " WHERE ID = " & Updatesht.Cells(i, 1).Value

(白茶) 2021/10/13(水) 13:03


 それでもダメなら一旦 strSQL をイミディエイトにプリントして確認してみたらどうでしょ?
 なんかどっかに構文の間違いがあるんだと思います (けど私なんかにわかるかな...)

(白茶) 2021/10/13(水) 13:05


 あ。そうか。
 >一つ以上の必要なパラメータの値が設定されていません
 ってエラーメッセージから推測しないとですね^^;

 試しに・・・

 "SET " & _
        Updatesht.Range("E1").Value & "=" & Updatesht.Cells(i, 5).Value & "," & _  
        Updatesht.Range("G1").Value & "='" & Updatesht.Cells(i, 7).Value & "'" & _
    " WHERE ID = " & Updatesht.Cells(i, 1).Value

 あるいは[G1]の「販売店」って文字列がそもそもカラム名として正しくないとか? (それはないか^^;)

(白茶) 2021/10/13(水) 13:11


 白茶さんありがとうございます。

 シングルクォーテーションを入れてみたら、出来ました!

 やはりSQLは難しいですね。^^;
(佐々木) 2021/10/13(水) 13:52

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.