Access VBAでSQLを発行する時のカラム名の指定は[]で囲むべきです。デバッグしていて私自身ハマった点ですのでご紹介させてください。
Accessのテーブルカラムは他のRDBとは若干ちがって日本語でカラムを作成する事ができます。私自身2バイト文字を使ってテーブル作成したことがなかったので、はじめてAccessのサンプルを見た時には少々驚きました。
しかしVBAでSQLを発行する場合には注意が必要になってきます。
UPDATE sampleTabel set memo=’かっこでくくらないとエラーになるよ’ WHERE アイテム=’消しゴム’;
カラム名memoを[memo]と[ ]で括っていないのでエラーとなります。
UPDATE sampleTabel set メモ=’これなら実行される。’ WHERE アイテム=’消しゴム’;
そこで、このsampleTableのmemoカラムを日本語で「メモ」としてCreateTableした場合は[ ]で括らなくてもOKです。
VBAでSQL発行する場合はカラム名は[ ] で括る!
そうなんです、VBAでSQLを発行する場合はカラム名を[ ]で括る必要があるんです。
UPDATE sampleTabel set sampleTable.memo=’かっこでくくらないとエラーになるよ’ WHERE アイテム=’消しゴム’;
上記のようなテーブル名からドットでつないでsampleTable.memoとしてもエラーになります。
なお、今まで説明してきたエラーとなるSQLはクエリデザインのSQLに貼り付ければ自動変換してくれるので問題なく処理されます。
サンプルコード
Private Sub コマンド0_Click()
Dim ct As New ADODB.Connection
Dim stSQL As String
Set ct = CurrentProject.Connection
'テーブルのカラムが日本語の場合 例:カラム名=メモ
'stSQL = "UPDATE sampleTabel set メモ='これは更新できるパターンだよ。' WHERE アイテム='消しゴム'"
'stSQL = "UPDATE sampleTabel set [メモ]='これでも更新できるよ。' WHERE [アイテム]='消しゴム'"
'テーブルのカラムが英字の場合 例:カラム名=memo
stSQL = "UPDATE sampleTabel set [memo]='英文字だけのカラムかっこで囲む必要があるよ' WHERE アイテム='消しゴム';"
ct.Execute stSQL
Set ct = Nothing
End Sub
コメント