こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

SQL文のWHERE句でエラー

Access2000のMDBをADOで読み込もうとしていますが、WHERE句を指定すると例外が発生します。

strSQL = "SELECT * FROM Q住所録 ORDER BY [カナ]";
strWhere = "([カナ] Like \'ア*\')";
strSQL += " WHERE " + strWhere;

ウォッチウィンドウでstrSQLを確認すると
{"SELECT * FROM Q住所録 ORDER BY [カナ] WHERE ([カナ] Like 'ア*')"}
とちゃんとなっていますが、

varTName = _T(strSQL);
hr = pRs.CreateInstance( __uuidof( Recordset));
pRs->Open( varTName, _variant_t((IDispatch *)pdb), adOpenDynamic, adLockReadOnly, dCmdUnknown);

でオープンすると例外が出ます。
エラーの内容は
IDispatch error #3092
となっています。
WHRERE句をしていなければ全レコードがちゃんと表示されます。
WHERE句は使えないんでしょうか。
Filterプロパティの使い方もよくわかりません。
レコードの抽出の方法を教えてください。

投稿日時 - 2004-12-07 13:18:05

QNo.1116509

暇なときに回答ください

質問者が選んだベストアンサー

Accessのクエリデザイン上での like のワイルドカードは * ですが、
ADO でのワイルドカードは一般的に % です。

その辺、変えてもダメですか?

投稿日時 - 2004-12-07 19:52:58

お礼

解決です!
ADOでのワイルドカードが%だとは知りませんでした。
VBでずっと*を使っていたものですから。
ありがとうございました。

投稿日時 - 2004-12-07 22:09:32

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(5)

ANo.4

こんばんは。

半角カナですか・・・。
strSQLの中身はは大丈夫で、ADOを経由している時点で文字化けしているような・・・。
LIKEの条件とカラムの内容を全角同士で比較するようなアプローチの方が無難かと・・・。

お力になれずにすみません・・・。
(^^ゞ

投稿日時 - 2004-12-07 18:24:49

お礼

ありがとうございます。
そう思って全角でやってみても結果は同じでした。
WHERE句をいろいろ()でくくってみたり...
もう少しがんばってみます。ありがとうございました。

投稿日時 - 2004-12-07 18:34:30

ANo.3

こんにちは。

>>同じ内容でAccessのクエリーからSQLビューでSQL文を書くとちゃんと抽出されます。
SQLの問題じゃないのかなぁ・・・。
とりあえずSQL載せてください。
後はテーブルの詳細(カラムの型とか、入ってるデータとか)がわかれば嬉しいです・・・。
(^^ゞ

投稿日時 - 2004-12-07 16:57:08

補足

度々ありがとうございます。
テーブル(クエリー)の内容は、

名前 テキスト型 (漢字で入っています)
カナ テキスト型 (半角カナで入っています)
・・省略・・
生年月日 日付型
グループ 数値(バイト)型

となっています。
SQL文の内容は
"SELECT * FROM Q住所録 WHERE ( (グループ = 1) ) ORDER BY カナ"
だとうまくいくのですが、
"SELECT * FROM Q住所録 WHERE ((カナ Like 'ア*') ) ORDER BY カナ"
だと何も表示されません。

テーブルには
あいうえお アイウエオ ・・・ 2
ももももも モモモモモ ・・・ 1
といったデータが入っています。

カナはwebの関係上全角表示されていますが、実際にはテーブルの中身WHERE句も半角カナです。
WHERE条件でグループを1と指定した場合、
ももももも
が表示され、カナをア*と指定すると、レコードセットオープン後のEOFがTRUEとなっています。

よろしくお願いします。

投稿日時 - 2004-12-07 17:25:43

ANo.2

こんにちは。

>>WHERE句は使えないんでしょうか。
ORDER BY の後には使えません・・・。
単純にSQLが間違ってます。
(^^ゞ

投稿日時 - 2004-12-07 13:40:15

補足

ありがとうございます。
エラーはなくなりましたが、レコードが1件も表示されません。

同じ内容でAccessのクエリーからSQLビューでSQL文を書くとちゃんと抽出されます。
どこがいけないのでしょうか。

ちなみに、別の数値型フィールドをWhere条件で抽出するとちゃんと出ます。
Like式がいけないのでしょうか。

投稿日時 - 2004-12-07 15:17:36

ANo.1

WHERE句はORDER BYの前に書かないと駄目なような。
んなもんで、ORDER BYの前にWHERE句を書いてみてください。
ようは

{"SELECT * FROM Q住所録 WHERE ([カナ] Like 'ア*') ORDER BY [カナ]"}

こんな感じにすると良いのでは・・・。

投稿日時 - 2004-12-07 13:37:22

お礼

そうでした。ありがとうございます。
後指摘通りなおすと、エラーはなくなったんですが、レコードが1件も表示されません。

同じ内容でAccessのクエリーからSQLビューでSQL文を書くとちゃんと抽出されます。
どこがいけないのでしょうか。

ちなみに、別の数値型フィールドをWhere条件で抽出するとちゃんと出ます。
Like式がいけないのでしょうか。

投稿日時 - 2004-12-07 15:17:22

あなたにオススメの質問