これに気づかず午後をひたすら原因探ししてしまった……
Accessを使ったデータ引っ越し作業(この是非については別の問題とします。客先の指定なので仕方ない)において、以前は手作業でクエリとして組んだSQLを実行していたのですが、VBAで自動化することになりそのままSQLを文字列としてVBAの処理に組込みました。VBAではADODOのRecordsetを使ってSQLを実行していたのですが……上手く動かない。というかエラーは起きていないのに処理結果が想定と違う。しばらく考えてふと「あれ?LIKE文のワイルドカードがアスタリスク(*)になってる!」。
そう、Accessの機能として作るクエリではワイルドカードはアスタリスクなのですが、ADODBで使うワイルドカードはいわゆる一般的なSQLと同じ「%(パーセント)」なんですね。やられました。
たとえばこのように「abcを含む列は全部固定文字ABCに置換する」のようなSQLの場合
UPDATE テーブル名 SET テーブル名.列名 = 'ABC' WHERE テーブル名.列名 LIKE '*abc*'
こうなります。
UPDATE テーブル名 SET テーブル名.列名 = 'ABC' WHERE テーブル名.列名 LIKE '%abc%'
あーもう!!!
Accessマクロ&VBA 開発工房 Office365/2019/2016/2013対応
- 作者:緒方 典子
- 出版社/メーカー: ソシム
- 発売日: 2019/07/19
- メディア: 単行本