[ Access-VBA ] カラム名のシャープ(#)をエスケープする ( 日付の構文エラーです 演算子がありません )

Pocket

Access を使用してデータ管理を行っている業務があるのですが、何とカラム名にシャープ ( # ) が付けられていることによって、レコードの削除ができないエラーに遭遇しました。

スポンサーリンク

カラム名にシャープを使用していた

カラム名にシャープ ( # ) が付けられていました。なぜ、そうしたのかは不明です。おそらくは、昔の名残か何かなのだろうと推測しています。

そして、レコードを削除する VBA のスクリプトを実行すると、エラーとなってしまいます。はー。エラーは SQL によっても異なりますが、下記の2種類のエラーの発生を確認することができました。

  • 日付の構文エラー
  • 演算子がありません

エラーとなるスクリプト

Dim cn As New ADODB.Connection
' MDB ファイルに接続する
cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=F:\path\to\access.mdb;"

' エラーが発生
cn.Execute("delete from table1 where col1# = '00000'")

' 切断
cn.Close
Set cn = Nothing

エスケープ処理が必要

カラム名にシャープ ( # ) が付けられていることによって、Access が日付フォーマットの処理などを実行しようとしたようです。カラム名として認識させるにはエスケープ処理をする必要があります。そのために [ ] でカラム名を囲みます。

すると、正常にレコードの削除を行うことができました。


' カラム名をエスケープする
cn.Execute("delete from table1 where [col1#] = '00000'")

まとめ

カラム名にシャープ ( # ) なんか使うな!!

スポンサーリンク


Pocket

Leave a Comment

Your email address will not be published. Required fields are marked *