accessで日付とNGワードを組み合わせたクエリ抽出ができない

このQ&Aのポイント
  • access2000で、日付とNGワードを組み合わせたクエリの抽出がうまくいかない問題が発生しています。
  • フォームで入力された日付に基づいて、NGワードを含まないレコードの抽出を行いたいのですが、うまく動作していません。
  • 日付とNGワードが両方とも入力されていない場合には全てのレコードを抽出するようにしたいです。
回答を見る
  • ベストアンサー

accessのnot検索

access2000で テーブル[日付](yyyy/mm/ddで入力されています)   [内容](なんでも。空白の場合もあります) フォーム  「日付」(yyyy/mm/ddのみ入力可能にしています)  「NGword」(どんな文字でも入力できます) という項目を作成し・・・ 1、クエリでフォームの「日付」に入力したものかつ 2、フォームの「NGWord」を含まないレコードのみを抽出したいのですがうまくいきません。 「日付」「NGword」が空白の場合は入力された条件のみ適用させたいです。 (「日付」・「NGWord」が両方空の場合は全レコード抽出したいです) クエリを作成して・・・ [日付]の抽出条件を like "*" & forms![フォーム名]![日付] & "*" で [内容]の抽出条件を (not like "*" & forms![フォーム名]![NGword] & "*") or (is null) で設定したのですがうまくいきませんでした・・・泣 宜しくお願いします。

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

  • ベストアンサー
  • ja7awu
  • ベストアンサー率62% (292/464)
回答No.1

クエリの新規フィールドに次の2フィールドを設定します。 式1: IIf(IsNull([forms]![フォーム名]![日付]),True,[日付]=[forms]![フォーム名]![日付]) 式2: IIf(IsNull([forms]![フォーム名]![NGword]),True,Not ([内容] Like "*" & [forms]![フォーム名]![NGword] & "*")) いずれも「抽出条件」欄には、True を指定し、非表示にします。 [日付] と [内容]の「抽出条件」欄には、何も指定しません。 以上でご希望どおりの抽出が、出来ると思います。 なお、余分なこととは思いますが、状況によっては、フォームの内容変更した時、 更新後イベント等で Requery が必要な場合があります。

_tanaka_
質問者

お礼

助かりました!! お陰でうまく抽出することができました。 また何かありましたら宜しくお願いします。

その他の回答 (1)

noname#102878
noname#102878
回答No.2

ちょっと読みづらいんですが・・・ 【状況】 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です。

_tanaka_
質問者

お礼

確かにちょっと質問が読みづらいですね・・・反省します。 回答ありがとうございます。 今回は下の方の案でやらせていただきましたが 興味深い回答ありがとうございました。 またなにかありましたら宜しくお願いします。

関連するQ&A

  • ACCESSでの抽出について

    単純なクエリの抽出なのですが・・・。 区フィールド、町フィールドをクエリで作成して そのクエリを元に抽出フォームを作成しました。 そして、クエリの抽出条件に以下の式を入力しました。 Like "*" & [Forms]![F_抽出]![区] & "*" Like "*" & [Forms]![F_抽出]![町] & "*" しかし、大本のデータに [区]フィールド→品川区 [町]フィールド→空白 ・・・と、どちらかが空白の場合、そのレコード を抽出してくれません。 このように、空白フィールドを持つレコードをも 抽出するにはどのようにしたらようですか? 初歩的な質問で申し訳ありませんがよろしくお願いいたします。

  • Access2007で同月同日を抽出

    ある(*.accdb)のクエリーで日付の所に Like"*/"&Format(date(),"mm/dd") と書いて本日と同じ同月同日を抽出していますが本日ではなく任意の yyyy/mm/ddをあるレコード欄に入力したらその日付の同月同日を抽出するにはクエリーにどの様に書けばよいのか教えてください。

  • ACCESS日付形式について質問です。

    日付抽出条件を含んだフォームを作成したのですが、午前中までyyyy/mm/ddの形式で入力し、抽出できたのですが、今mm/ddの形式で入力しないと抽出できなくなりました。 変更をした覚えはないのですが・・・ yyyy/mm/ddで抽出できる方法を教えてください。 おねがいします。

  • ACCESS フォームで入力した日付をクエリで読み

    ACCESS フォームで入力した日付をクエリで読み替えたい ACCESS フォームで入力した日付をクエリで使用しているテーブルの書式に変換したい フォーム テキスト名:日付にyyyymmdd で入力します クエリ テキスト名:日付はパラメータとして使用しています クエリ内で使用しているテーブルの日付書式は 日付:yyyy/mm/ddです パラメータは 「日付始」と「日付終」の2箇所のテキストに入力されたデータを使用しています。以下がパラメータです。 Between [Forms]![フォーム]![日付始] and [Forms]![フォーム]![日付終] フォームのテキストボックスにyyyymmddと入力してもクエリでエラーが出ることない パラメータを日付に設定したいのですがどうしたらよいでしょうか? ちなみに、以下の式を入れたらエラーです。 Between CDate(Format([Forms]![フォーム]![日付始],"yyyy/mm/dd")) and CDate(Format([Forms]![フォーム]![日付始],"yyyy/mm/dd")) と入力しましたところ、、、、「式が複雑すぎるか、、、」のエラーメッセージが出てしまいました。 どなたか助けてください。お願い致します。

  • アクセスのクエリ抽出ができない。

    アクセスのクエリで、フォーム上のチェックのオンオフで抽出データの抽出条件を変更しようと思っています。 条件は、データの作成日付(yyyy/mm/dd形式)で、抽出の条件式は IIf([Forms]![F_送付状]![チェック40]=False,>=DateAdd("m",-1,Date()),>"0") です。チェック40がフォーム上のチェック(コントロールソースなし)で、オフの場合は、1ヶ月前までのデータを抽出、オンの場合は全件を抽出したいと思っています。 上記の式でうまく抽出できない(データが抽出できない)のですが、アドバイスをお願いします。

  • Accessで日付を抽出するパラメータを設定したい

    Accessのクエリで日付に対して与えているパラメータがあります。 パラメータで指定したいデータはフォームのテキストに入力した日の23:59:59 以降の日付を抽出したい。 入力:数値8桁(yyyymmdd)で行う 抽出先テーブルのデータ:yyyy/mm/dd hh:mm:ss 現在以下のパラメータを日付に対して与えると「式が複雑すぎます、、、」と注意されてしまいます。 指定日の23:59:59を抽出範囲として指定するのはどうしたらよいでしょうか? 入力値の変換も含めて、以下のパラメータを入れています。 「+"23:59:59"」をとればエラーは出ません。 <=IIF(Len([Forms]![フォーム名]![日付])=8,CDate(Format([Forms]![フォーム名]![日付],"@@@@/@@/@@")),#9999/1/01#)+"23:59:59" どなたか、お助け下さい。よろしくお願い致します。

  • Accessであいまい検索するフォームをつくってみたんですが?

    Accessの初心者です。 本などをみながらあいまい検索ができるようなフォームをつくってみましたがフォームを開いた時、全レコードが表示されてしまいます。 クエリーの抽出条件はLike "*" & Forms!フォーム1!テキスト0 & "*"にしてテキストボックスプロパティの更新後処理でDoCmd.Requeryとしました。(意味がよくわからないんですけど) フォームを開いた時やテキストボックスになにも入力されていない時、全レコードが表示されないようにするにはどうすればいいのでしょうか? よろしくお願いします。

  • access2000 何日~何日の日付のデータ絞込み

    こんにちは。 access2000で、日付の期間のデーターを絞り込みしたいのですが・・。 クエリーで抽出条件にどう記入すればよいでしょうか? データーは、yyyy/mm/dd です。 2003/4/1~2004/3/31のデーターを抽出したいのですが・・。 お願いします。 それと、画面なのですが自宅は17インチ会社は15インチでフォームを作成すると、15インチに入りません・・。 自動的に画面に納まる事は出来ないでしょうか?? お願いします。

  • ACCESS2000で検索値空白時の抽出

    ACCESS2000で質問です。 顧客データベースがあります。 シリアルと登録名で検索をかけて、どちらかでヒット、又は両方ANDでヒットしたものをクエリで抽出したいです。以下の条件式はクエリの抽出条件の同じ行に入れています。データベースのうち、シリアルと登録名が両方入力されているものは問題なくヒットするのですが、どちらかが空欄のものがヒットしません。どちらかが空欄のものもヒットさせ、フォーム[検索]で何も入力しないでクエリを開いた時は全レコードを表示するようにしたいのですが、どのような式を書けばよいのでしょうか。宜しくお願いいたします。 Like "*" & [Forms]![検索].[登録者] & "*" Like "*" & [Forms]![検索].[シリアル] & "*"

  • Access 日付/時間型を検索するには?

    いつもお世話になっております。 色々と調べたのですが、データが思い通りにならなく困っております。 検索用フォームを作成し、番号と件名であいまい検索出来るようにしたのですが、年月日でも検索出来るように依頼されました。 自分なりに組んでみたのですが、検索機能が動いてくれませんでした。 年月日のデータ形式は「日付/時刻型」で、格納されているデータは「yyyy/mm/dd 00:00:00」となっています。 日付のみで検索すれば良いのですが、いくら検索しても、全データが抽出されてしまいます。 どこが悪いのかご指摘お願い致します。 ☆クエリ☆ ・Q処理検索 左から「処理番号」「件名」「年月日」となっており、 「処理番号」と「件名」の抽出条件(1行目)には 「Like"*"&[Forms]![F処理検索]![処理番号]&"*"」 「Like"*"&[Forms]![F処理検索]![件名]&"*"」と記述 「年月日」の抽出条件に 「Between[Forms]![F処理検索]![開始]and[Forms]![F処理検索]![終了]」を2行目に記述 「>=[Forms]![F処理検索]![開始]」を3行目に記述してあります。 ☆フォーム☆ ・F処理検索 年月日は2つテキストボックスを用意しています。 各々に「開始」と「終了」の名前をつけ、定型入力を「0000/00/00\ 00:00:00;0;_」としてあります。 検索実行ボタンをクリックし、詳細検索表示フォームを表示します。 ・詳細検索表示 「F詳細検索」の結果をフォームビューで表示させます。 ☆マクロ☆ フォームを開く ・フォーム名:詳細検索表示 ・フィルタ名:Q処理検索 以上、宜しくお願い致します。

専門家に質問してみよう