Microsoft Access 掲示板

SQL更新の記述(SET部)

4 コメント
views
4 フォロー

初心者です。大変初歩的な質問ですみません。
VBAでSQL更新をしたいのです。フィールド[備考・MEMO]+変数(tyokusou)+文字列で。
"UPDATE [T発注Sub] INNER JOIN [Q一括変更用チェックON分] " &
          "ON [T発注Sub].[発注明細ID] = [Q一括変更用チェックON分].[発注明細ID] " &

          "SET [T発注Sub].[備考・MEMO] =  [備考・MEMO]" & tyokusou & " さんへ直送;"
としたのですが駄目でした。SET部が間違いと思うのですが、どこが駄目か分からなくて・・・

minami
作成: 2024/06/10 (月) 12:57:28
通報 ...
1

SQL内の文字列リテラルは引用符("または')で囲む必要があります。
つまり、下記のようなSQLになります。

UPDATE [T発注Sub] INNER JOIN [Q一括変更用チェックON分] 
         ON [T発注Sub].[発注明細ID] = [Q一括変更用チェックON分].[発注明細ID] 
       SET [T発注Sub].[備考・MEMO] = [T発注Sub].[備考・MEMO] & ' 田中 さんへ直送';

※tyokusou の中身が 田中 の場合

このSQLをVBA内に記述する場合は、VBAとしての文字列リテラルにする必要があるので、引用符(")で囲む必要があります。

Dim sSQL As String
sSQL = "UPDATE [T発注Sub] INNER JOIN [Q一括変更用チェックON分] " & _
       "ON [T発注Sub].[発注明細ID] = [Q一括変更用チェックON分].[発注明細ID] " & _
       "SET [T発注Sub].[備考・MEMO] = [T発注Sub].[備考・MEMO] & ' 田中 さんへ直送';"

変数部分は文字列リテラルの外に出す必要がありますので、下記のようになります。

Dim sSQL As String, tyokusou As String
tyokusou = "田中"
sSQL = "UPDATE [T発注Sub] INNER JOIN [Q一括変更用チェックON分] " & _
       "ON [T発注Sub].[発注明細ID] = [Q一括変更用チェックON分].[発注明細ID] " & _
       "SET [T発注Sub].[備考・MEMO] = [T発注Sub].[備考・MEMO] & ' " & tyokusou & " さんへ直送';"

下記を一読しておくと理解が深まると思います。

Access上のコード内で引用符(")と単引用符(')の使い分けについて - hatena chips

2
minami 2024/06/10 (月) 16:50:35 ddfe5@53762

hatenaさん ありがとうございます。
コード修正したら出来ました。あと変数の前に★等の記号入れたいのですがどう記述したらいいでしょうか?
= [T発注Sub].[備考・MEMO] & ' " & tyokusou & " さんへ直送';" の 変数tyokusouの前にです。
" ★田中さんに直送 ”としたいのです。頭がこんがらがってしまって・・・すみません。

3

前回の回答と、リンク先を熟読して、一度自分でチャレンジしてみてください。
一度理解できれば、簡単なことだと思います。

どうしてもできないようでしたら、その旨返信してください。

ヒント

"SET [T発注Sub].[備考・MEMO] = [T発注Sub].[備考・MEMO] & '★田中さんに直送';"

'田中 の部分が変数なので、文字列をその部分だけ分割して&で結合する↓

"SET [T発注Sub].[備考・MEMO] = [T発注Sub].[備考・MEMO] & '★" & "田中" & "さんに直送';"

'"田中"の部分を変数にする

リンク先でも言ってますが、SQLとVBAは別物ですので、SQLの部分とVBAコードの部分を意識するようにしましょう。

文字列結合はSQLでもVBAでも &
引用符は SQLでは ' または " どちらでも可、VBAでは " のみ

4
minami 2024/06/11 (火) 08:38:08 ddfe5@53762

hatenaさん ありがとうございます。
”田中”を変数のtyokusouに変更するだけで出来ました。
ややこしく考えすぎでした。とにかく変数の前に”で区切り & 変数 & で繋いでその後に”で記述始めたらいいのですね。
初歩的な事に丁寧な解説頂き、すみませんでした。
お世話になりました。