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'")
まとめ
カラム名にシャープ ( # ) なんか使うな!!