饂飩コーディング

iOSアプリやら、Unityやら、Cocos2dやらごにょごにょ書いております

AccessのSQLはカラム名を[]で囲んだほうが安全なのか?

サイトが引っ越しました。→https://scombu.com

約1秒後に自動的にリダイレクトします。切り替わらない場合はリンクをクリックしてください。

はい!またドはまりしました。

まぁ、もともとカラム名って二バイト文字で設定するものじゃないのは今までの経験上
それが当然だとおもっていたんですが、Accessではテーブルカラムを日本語で作成できますよね。
当然のようにテーブル構造が日本語で命名されてて「へぇ~そんなもんなんだ?」
程度の認識でした。

が、SQL書いて実行するとエラーになることがあったんです。
たとえば
UPDATE sampleTabel set memo='かっこでくくらないとエラーになるよ' WHERE アイテム='消しゴム';
のmemoの部分です。このSQLはエラーになる。もちろんカラムはmemoでCreateしてる。

はぁ????

ちなみにテーブルのカラム名を日本語でメモにして
UPDATE sampleTabel set メモ='これなら実行される。' WHERE アイテム='消しゴム';

そんなバカな!?って感じで
もやもやしてます。

そもそも[]でカラム名をくくるって知らなかった…・・・・

UPDATE sampleTabel set sampleTable.memo='かっこでくくらないとエラーになるよ' WHERE アイテム='消しゴム';
これでもダメだからね。はぁ???

Accessって謎。
ちなみに、上記SQLはクエリデザインにはりつければどちらもエラーなく処理できます。
問題なのはVBAでは[]がついてないと動かない。



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