dポイントプレゼントキャンペーン実施中!

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プロパティの使い方もよくわかりません。
レコードの抽出の方法を教えてください。

A 回答 (5件)

Accessのクエリデザイン上での like のワイルドカードは * ですが、


ADO でのワイルドカードは一般的に % です。

その辺、変えてもダメですか?
    • good
    • 0
この回答へのお礼

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

お礼日時:2004/12/07 22:09

こんばんは。



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

お力になれずにすみません・・・。
(^^ゞ
    • good
    • 0
この回答へのお礼

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

お礼日時:2004/12/07 18:34

こんにちは。



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

この回答への補足

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

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

となっています。
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
    • good
    • 0

こんにちは。



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

この回答への補足

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

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

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

補足日時:2004/12/07 15:17
    • good
    • 0

WHERE句はORDER BYの前に書かないと駄目なような。


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

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

こんな感じにすると良いのでは・・・。
    • good
    • 0
この回答へのお礼

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

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

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

お礼日時:2004/12/07 15:17

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!