- ベストアンサー
抽出条件の表現方法(アクセス2000)
クエリの抽出条件でLIKE "*" と >"12345"を切替て使いたいのですが、どう表現して良いか IIF(DS = 1, "< " & dt(), "Like " & "'*'") のようにしたのですが、通用しません。 わかる方、ご教示下さい。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
クエリのデザイン(フィールド名など)が基本的に同じであれば 同じフォームから切り替えて使えます。 フォームのレコードソースをフォームを開くときに設定してあげればOKです。 Private Sub Form_Open(Cancel As Integer) If DS = 1 then Me.RecordSource = "SELECT * FROM クエリ1" Else Me.RecordSource = "SELECT * FROM クエリ2" End If End Sub と言った感じです。 そもそもここまでくればクエリでなくレコードソースを SQL文にしてしまえばいいかもしれません。 たとえば Private Sub Form_Open(Cancel As Integer) Dim Str as String Str="" If DS = 1 then Str = "抽出したいフィールド名 ='" & dt() & "'" Else Str = "抽出したいフィールド名 LIKE '" & * & "'" End If Me.RecordSource = "SELECT * FROM テーブル名 Where " & Str End Sub みたいなかんじ。 ちょっと難しいですか?
その他の回答 (4)
- t2hayashi
- ベストアンサー率46% (102/219)
すいません間違えました >Str = "抽出したいフィールド名 LIKE '" & * & "'" Str = "抽出したいフィールド名 LIKE '*'" ですね。しかしながらLIKE * であればWhere条件を設定するまでもない?!
- t2hayashi
- ベストアンサー率46% (102/219)
DSはなんでしょう? ユーザー定義関数? レコードごとに抽出条件が違うっていうのは 意味がわからないので何かconstなどで固定されたパラメーターや フラグなんでしょうね。 であればいっそ抽出条件の違うクエリを二つ作って それを切り替えて使う方向で考えてはいかがでしょうか。
補足
DSはおっしゃるとおりです。今はコメントいただいたように2つのフォームを切り替えて使用しています。1つのフォームで実現するために1つのクエリで実現できないか調べています。やはりだめなんでしょうか。
tab1: ID_field_1_field_2 1________1_12345 2________1_123456 3________2_1111111 クエリ1: ID_field_1_field_2 3________2_1111111 2________1_123456 SELECT * FROM tab1 WHERE (Field_1=1 And Field_2>"12345") Or (Field_1<>1); 普通に Or を使うべきケースだと思います。
補足
DSはフィールドではないです。IIFではなく、関数でも記述方法があればそれでもいいのですが、・・・
- ttk11
- ベストアンサー率25% (40/154)
抽出条件の行を2行、使用する たぶん DS はテーブルの項目に有るものだと 思うので IIF(DS = 1, "< " & dt(), "Like " & "'*'") の意味があまり詳しくは理解できませんが 以下の方法 DSのフィールド 対象のフィールド ↓ =1 >12345 <>1 LIKE("*") そもそも LIKE("*") なら 全件抽出となるので 2行目は指定不要かもしれませんが・・・
補足
回答ありがとうございます。しかし、DSはフィールドではありません。テーブルに関係ない条件です。
お礼
クエリの抽出条件定義にこだわらない方がいいですね。この方法で実現できそうです。本当にありがとうございました。