AccessVBAのSQLはカラム名を[]で囲むべし

MSACCESS_eyecatch
SBMJOB

Access VBAでSQLを発行する時のカラム名の指定は[]で囲むべきです。デバッグしていて私自身ハマった点ですのでご紹介させてください。

目次

スポンサーリンク

Accessのテーブルカラムは他のRDBとは若干ちがって日本語でカラムを作成する事ができます。私自身2バイト文字を使ってテーブル作成したことがなかったので、はじめてAccessのサンプルを見た時には少々驚きました。

しかしVBAでSQLを発行する場合には注意が必要になってきます。

エラーになる例

UPDATE sampleTabel set memo=’かっこでくくらないとエラーになるよ’ WHERE アイテム=’消しゴム’;

カラム名memoを[memo]と[ ]で括っていないのでエラーとなります。

日本語カラムだとOKな例

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

スポンサーリンク

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

システム開発SE・アプリ開発・デバッガー等々なんでもやる猫の下僕です。現在は凶暴猫にカタカタ動く手を狙われながらキーボードを打っています。かなりゆるい性格なのでコメントやメッセージお気軽に〜お仕事のご依頼もお気軽にぃ〜

スポンサーリンク

コメント

コメントする

CAPTCHA


目次