アプリ版:「スタンプのみでお礼する」機能のリリースについて

VB6.0+ADO2.7で、mdbファイルを扱っています。
.filterプロパティを使ってabcフィールドの値がnullまたは空のテーブルを抽出したく
recordset.filter="abc= null or abc=''"
としました。この場合は問題ないのですが、更にdefフィールドの条件を追加し
recordset.filter="(abc= null or abc='') AND def= 'xyz'"
としたところ
「実行時エラー3001
引数が間違った型、許容範囲外、または競合しています。」
というエラーが発生してしまいます。
また、
recordset.filter="abc= null AND def= 'xyz'"
或いは
recordset.filter="abc='' AND def= 'xyz'"
では問題ありません。
何が悪いのでしょうか?
よろしくお願いします。

A 回答 (3件)

http://msdn.microsoft.com/library/ja/default.asp …

>次のように、OR で句を結合してできた句のグループを、AND を使ってさらに別の句と結合することはできません。
>(LastName = 'Smith' OR LastName = 'Jones') AND FirstName = 'John'

こちらの情報によると、ダメみたいですね。
Filter プロパティは制約が多いみたいで、where句のように自由に条件は書けないみたいですね。

> Null を使うことはできません。
さらに、こういう記述もあります。

SQL文のwhere句を利用した方が良いかも知れませんね。
    • good
    • 0
この回答へのお礼

venzou様
回答ありがとうございます。
msdnのサイトは大変参考になりました。
Filter プロパティは手軽なので、つい使ってしまうのですが、おっしゃる通り複雑なことをする場合は、SQLの方が良いのでしょうね。

お礼日時:2007/01/06 14:33

最近は VB.NET + Oracle DataProvider/ADO.NET の環境での開発がメインなので、Old-VB + Old-ADO のやり方を随分忘れてしまってますが。



カラム abc ってのは、String型ですかね。
であれば、単純に recordset.filter="( CStr( abc ) IS NULL AND CStr( def ) = 'xyz' " ってな条件式に簡略化できるのでは?

要は、カラム abc に対して、Oracle で言う所の NVL() を施しておいて、それに対して NULL なレコードを抽出してね、ってことです。
    • good
    • 0

.filter = "(abc = null OR def = 'xyz') AND (abc = '' OR def = 'xyz')"


みたいに均してみるとか。
    • good
    • 0
この回答へのお礼

temtecomai2様
回答ありがとうございます。

アドバイスの通りしたところ、エラーな無くなりました。
AND条件とOR条件が混在する場合は、このように記述する決まりなのでしょうか?

お礼日時:2007/01/05 20:55

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

このQ&Aを見た人はこんなQ&Aも見ています