misc.log

日常茶飯事とお仕事と

AccessのクエリとVBAにおけるADODBで用いるクエリーではLike文記述が違う!

これに気づかず午後をひたすら原因探ししてしまった……

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対応

Accessマクロ&VBA 開発工房 Office365/2019/2016/2013対応

  • 作者:緒方 典子
  • 出版社/メーカー: ソシム
  • 発売日: 2019/07/19
  • メディア: 単行本