スポンサーリンク

【access/VBA】アクセスVBAでADOを利用するときワイルドカードは*ではなく%であることに気がつくまでに小一時間要した×2

access
スポンサーリンク
※当サイトは広告を含みます

題名にあるとおり、アクセス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

スポンサーリンク
スポンサーリンク
access
スポンサーリンク
mwkをフォローする
エクセルがともだち

コメント

タイトルとURLをコピーしました