題名にあるとおり、アクセスVBAでADOを利用するときワイルドカードは*ではなく%であることに気がつくまでに小一時間要した。
アクセスも自信なし。
SQLも自信なし。
アクセスVBAもごくたまにしかやらない。
アクセスVBAを書いたがうまくいかない。
で、うまくいかなくてもSQLが悪いのか、VBAのコードが悪いのか、ただの綴り間違いなのか、私の発する電磁波が邪魔をしているだけなのか、何が悪いのか、全部悪いのか、突き止めるのが大変。
なにがいけないんだー、どうしたらいいんだーと、ネットで検索しまくって、アクセスではワイルドカードはアスタリスク(*)だが、アクセスのADOではワイルドカードは%を使う、ここがいけなかったんだ!ということに気づく。
そして、デジャヴュ。数か月前に同じことで悩んで、同じようにネットを検索し、ADOではワイルドカードは%なんだ!そうだんったんだ~、という状況があったこ記憶がよみがえった。ショック。
以下例文。もう忘れて無駄な時間を過ごしませんように。
はまった状況とは違う例ですが、なんとなく気分でテーブル作成クエリでやってみました。
使用したのは以下のテーブル。
ここから住所に東京を含むレコードを抽出して、新規テーブルを作成(T_名簿_東京)
■ ADOを利用したあいまい条件でのテーブル作成アクションクエリ
※T_名簿の項目「住所」に「東京」を含むレコードを抽出し、新たなテーブル「T_名簿_東京」を作成
※ADOを使用するための参照設定を事前に設定済の場合のコードです(Microsoft ActiveX Data X.X Library) (Xは数字)
SQLで Like ‘%東京%’ とすることで 住所に「東京」を含むレコードを抽出します。
Like ‘*東京*’ とすると、まじめに「*東京*」という文字列を探しに行くのでレコードはゼロ件となってしまいます。
Sub テーブル追加ADO()
Dim cn As ADODB.Connection
Dim cmd As ADODB.Command
Set cn = CurrentProject.Connection
Set cmd = New ADODB.Command
Dim vSql As String
vSql = “SELECT * INTO T_名簿_東京 FROM T_名簿 ” & _
“WHERE 住所 Like ‘%東京%'” ←ここでワイルドカード使用
With cmd
.ActiveConnection = cn
.CommandText = vSql
.Execute
End With
End Sub
■ ちなみにDAOを使用した場合のコード
※DAOを利用するための参照設定を事前に設定済の場合のコードです(Microsoft Office XX.X Access database engine Object Library) (Xは数字)
DAOではワイルドカードはアスタリスク(*)です
Sub テーブル追加DAO()
Dim db As DAO.Database
Dim vSql As String
Set db = CurrentDb
vSql = “SELECT * INTO T_名簿_東京 FROM T_名簿 ” & _
“WHERE 住所 Like ‘*東京*'”
db.Execute vSql
db.Close
End Sub
■ ADO、DAOを利用しないVBAのコード
ワイルドカードはアスタリスク(*)です
Sub テーブル追加()
Dim vSql As String
vSql = “SELECT * INTO T_名簿_東京 FROM T_名簿 ” & _
“WHERE 住所 Like ‘*東京*'”
DoCmd.RunSQL vSql
End Sub
コメント