質問: accessのnot検索 access2000で テーブル[日付](yyyy/mm/ddで入力されています) [内容](なんでも。空白の場合もあります) フォーム 「日付」(yyyy/mm/ddのみ入力可能にしています) 「ngword」(どんな文字でも入力できます) という項目を作成し・・・ 1、クエリでフォームの「日付」に入力したものかつ 2、フォームの「ngword」を含まないレコードのみを抽出したいのですがうまくいきません。 「日付」「ngword」が空白の場合は入力された条件のみ適用させたいです。 (「日付」・「ngword」が両方空の場合は全レコード抽出したいです) クエリを作成して・・・ [日付]の抽出条件を like "*" & forms![フォーム名]![日付] & "*" で [内容]の抽出条件を (not like "*" & forms![フォーム名]![ngword] & "*") or (is null) で設定したのですがうまくいきませんでした・・・泣 宜しくお願いします。
回答: ちょっと読みづらいんですが・・・ 【状況】 1. tableaにfielda(文字列型)とfieldb(文字列型)がある 2. 非連結型のformaというフォームがある。 3. formaには、txtaとtxtbという2つのテキストボックスがある。 【検索要件】 1. txtaに入力されたキーワードを含み、かつ、txtbに入力されたキーワードを含まないレコードセットを取得したい。 2. txtaとtxtbの片方のみ入力された場合は、入力された条件のみでレコードセットを取得したい。 3. txtaとtxtbの両方が空っぽの場合は全件取得したい。 【問題点】 1つのクエリで、これら動的な条件に対応したいのだがうまくいかない。 ってことですよね? 手早く簡単に済ませるならvbaからsql文字列を使ってadoで検索を掛ける方法です。 クエリの検索結果をどのように利用したいのかわからないのですが、とりあえず一覧表示フォームでも単票フォームでもレポートでも大丈夫でしょう。 標準モジュールにグローバル変数を定義します。 標準モジュールに以下を書いてください。public gstrsql as string ' 検索するためのsql文 public gcstrsql as string = "select * from tablea;" ' gstrsqlにsql文が設定されていない場合の全件検索用sql文字列定数 次に、forma上のコマンドボタンcmdfindのクリックイベントプロシージャに書いてください。private sub cmdfind_click() dim strsql as string dim strwhere(1) as string dim i as long dim j as long strsql = "select * from tablea " if (isnull(me.txta.value)) or (len(me.txta.value) = 0) then else strwhere(i) = "(fielda like '*" & me.txta.value & "*') " i = i + 1 end if if (isnull(me.txtb.value)) or (len(me.txtb.value) = 0) then else strwhere(i) = "(fieldb not like '*" & me.txtb.value & "*') " i = i + 1 end if if i >=1 then strsql = strsql & "where " for j = 0 to i - 1 strsql = strsql & strwhere(j) & "and " next j strsql = left$(strsql, len(strsql) - 4) end if strsql = strsql & ";" gstrsql = strsql end sub で、一覧表示のためのformbで検索結果を開きたいのであれば、formbのopenイベントプロシージャに以下を書いてください。private sub form_open(cancel as integer) if len(gstrsql) >= 1 then me.recordsource = gstrsql else me.recordsource = gcstrsql end if end subこれで、formbのレコードソースプロパティへの設定が済みますので、formb上の各テキストボックスにtableaの値を表示することができます。 ただし、formbのデザイン時に「レコードソース」プロパティへ「tablea」を設定し、各テキストボックスの「コントロールソース」プロパティにはtableaの各フィールド名を設定しておいてください。 (レコードソースが空っぽのままだとコントロールソースを設定できないので。レコードソースは実行時に書き換えられるので大丈夫です。) 対象がレポートの場合でもopenイベントに書けばokです。