• ベストアンサー

DBソフト ACCESS:検索フォームでヒットしないときは

ACCESSで検索フォームを作り、そこにお客様IDを入れて、ヒットした場合は、別の入力用フォームが開いて、その方のデータが表示されるようにしています。 そこで教えていただきたいことがあるのですが、今の状態ですと、対象にないお客様IDを入れた場合、新規の画面が開いてしまいます。 これを開かないようにするにはどのようにすればよろしいのでしょうか。 検索フォームがどのようにして作っているかですが、クエリを作成し、お客様IDのレコードを追加し、抽出条件に「Like [forms]![お客様検索]![お客様ID] & "*"」と入れています。フォームではお客様IDを入れて、「実行ボタン」を押すと、フォームを開くマクロが実行されるようにしています。

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

  • ベストアンサー
  • O_cyan
  • ベストアンサー率59% (745/1260)
回答No.1

実行ボタンのクリック時イベントにフォームを開くだけではなく分岐をするように記述しなおせば良いのではないでしょうか。 If (DCount("[お客様ID]", "テーブル名", "[お客様ID] = [forms]![お客様検索]![お客様ID]) then 0 msgbox "該当するお客様IDがありません" else DoCmd.RunMacro "フォームを開くマクロ名", , "" end if のように

kaga2063
質問者

お礼

早速の回答、ありがとうございます。 ただ申し訳ないのですが、 >DCount("[お客様ID]", "テーブル名", "[お客様ID] = [forms]![お客様検索]![お客様ID] の部分がうまくいきません。Dcountの検索数をメッセージボックスに表示するように変更してテストしてみたのですが、 0と表示されてしまいます。空白を入れた場合は、全件数の値が表示されます。 あと >then 0 というのがよく意味が分からないのです。

その他の回答 (2)

  • O_cyan
  • ベストアンサー率59% (745/1260)
回答No.3

>then 0というのがよく意味が分からないのです 失礼しました。 If DCount("[お客様ID]", "テーブル名", "[お客様ID] = [forms]![お客様検索]![お客様ID])=0 then msgbox "該当するお客様IDがありません" else DoCmd.RunMacro "フォームを開くマクロ名", , "" end if の間違えです。

kaga2063
質問者

お礼

[forms]![お客様検索]![お客様ID]を Me.お客様IDとしたところ、うまくいきました。 ありがとうございました。

  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.2

もうひとつの手段として、検索結果を入力するフォームの「開く時(OnOpen)」イベントで、開くのをキャンセルするという方法もあります。 Private Sub Form_Open(Cancel As Integer)   If DCount("[お客様ID]", "お客様情報","[お客様ID]=[forms]![お客様検索]![お客様ID]") = 0 Then OpenCancel End Sub Private Sub OpenCancel()   MsgBox ("該当するお客様は登録されておりません")   DoCmd.CancelEvent   Exit Sub End Sub ※テーブル名又はクエリ名を「お客様情報」としています※ なお、お客様IDが主キーであれば、「Like」でのあいまい検索にはしなくていい気がしますが・・・? あと、No.の方の「DCount(~) Then 0 MsgBox ~」は、「DCount(~)=0 Then MsgBox ~」の打ち間違いではないかと思います。 > 0と表示されてしまいます。 該当のないお客様IDを入力した(→従来、新規レコードで展開されていた場合)のであれば、「0」が返されて問題ありません。

kaga2063
質問者

お礼

回答ありがとうございます。 O_cyanさんのやり方をちょっと変更したらできました。 お手数おかけしました。

関連するQ&A

  • Access2003 検索用フォームでの検索がうまくいかない

    Access2003 検索用フォームでの検索がうまくいかない とある、テーブルを参照するフォームを作成。 そしてテキストbokを設けて、各項目毎にキーワードを指定してデータを抽出できるようにしたいのですが、 どうもうまくいきません。 検索は出来ているのですが、全部ひっかからないのです。 例えば ID という項目を検索するbox に"1"を入力して ID=1の全データを抽出しようとすると、一部検索にかかってこないものがある という具合です。 テーブルに入力されている数字や文字が本当に一致しているかどうかも調べましたが確かに一致しています。 実際、テーブルを開いて ctr+f で検索すると全てひっかかります。 何が原因なのでしょうか??? 私の作った手順は以下のとおりです。 テーブル作成(エクセルからインポート) ※空白の欄もあります フォーム新規作成でフォーム作成 フォーム上にテキストbox作成 クエリ作成 (Like "*" & [Forms]![フォーム名]![テキストbox名] & "*" ) マクロ作成⇒フィルタ実行/上の手順で作ったクエリを登録 マクロをフォーム上へドロップ およそこのような手順です。

  • 検索にて抽出されたレコードをほかのテーブルに追加

    フォームで検索条件指定ご、マクロにて検索ボタンクリック時にフィルタ実行で、入力した条件と一致するものが抽出されるようになりました。 そこで抽出されたレコードをすでに作成してある検索履歴テーブルへ追加していき、あとでその履歴が見れるようにしたいのです。 イロイロ検索したところ、追加クエリを使用するように思うのですが、使い方が良くわからなく困っています。 詳しく教えてくれる方よろしくお願いします。 マクロのWhere条件は [姓フリガナ]=[Forms]![F照会]![姓検索] And [名フリガナ]=[Forms]![F照会]![名検索] And [生年月日]=[Forms]![F照会]![生年月日検索] 姓名フリガナ生年月日が一致するもの この抽出されたレコードのIDと、検索日を履歴としてのこしていきたいです。

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

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

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

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

  • 検索フォームで空白を抽出したい

    検索フォームを作成しました。 詳細は、 検索文字入力用テキストboxが4つ([検索1][検索2][検索3][検索4]) 検索ボタン、クリアボタンがあります。 検索用クエリを作成し、検索ボタンを押すと実行されるようになっています。 クエリ抽出条件には各フィールドごとに Like ("*" & [Forms]![検索フォーム]![検索] & "*") と記述しました。([検索]は[検索1]~[検索4]まであります) 現在、文字を入力しての検索は上手くいっていますが、フィールドの空白だけを抽出したい場合にどのようにしたらいいのかわかりません。 ご回答宜しくお願いいたします。

  • Access、検索用フォームでのあいまいな検索

    現在、Accessでデータベース作成をしています。 テーブル:  ・テーブルA          ・テーブルB          (A・B間にリレーションシップ設定) クエリ    ・検索クエリ(テーブルA・テーブルBを元に作成) フォーム   ・検索用フォーム(デザインビューでフォーム作成より)          ・検索結果フォーム(検索クエリを元に作成) また、以下のような設定を入力しました。 「検索クエリ」の抽出欄  Like "*" & [Forms]![検索用フォーム]![検索したい名前] & "*"・・(1)  ※検索したい項目、すべての抽出欄に設定済 「検索用フォーム」  検索実行ボタンを作成し、マクロを設定  ・フォームを開く→「検索結果フォーム」  ・フィルタ→「検索クエリ」 上記の設定により、検索用フォームに検索文字を入力することで、その結果を「検索結果フォーム」に反映することができました。 ただ、テーブルAが元になっている項目の抽出欄のみに(1)を入力すると、うまくいくのですが、テーブルBが元になっている項目欄にも (1)を入力しようとすると、検索用フォームからうまく検索することができなくなります。 2つのテーブルを元にしたクエリからは、検索用フォームをつかった複数のOR検索はできないのでしょうか?? ご存知の方、ぜひ教えてください。 よろしくお願いいたします。

  • Access2000で複数の検索項目を作りたいのですが・・・

    こんにちわ。 今、Accessで社員録を作成しているんですが、複数の検索について教えて下さい。 ■テーブル テーブル名:社員録 フィールド名:ID・検索名・氏名・所属ID・所属 ■クエリ クエリ名:社員録クエリ フィールド名:ID・検索名・氏名・所属ID・所属 検索名抽出条件:検索名フィールド: Like [Forms]![社員録 縦]![けんさく]         所属フィールド: Like [Forms]![社員録 縦]![抽出検索名] ■フォーム フォーム名:社員録フォーム:テキスト1・テキスト2・ボタン1       社員録サブフォーム:データソース:社員録クエリ テキスト1:所属を入力 テキスト2:検索名を入力 ボタン1:マクロの再クエリを実行する ■ここからが質問です■ (1)テキスト1又は、2が空白のとき社員録全体から検索かフィルタ。 (2)テキスト1・2が、入力されてる時、両条件から検索かフィルタ。 をしたいのですが、何かいい方法がありましたら教えて下さい。 説明が、長くなってしまってスミマセン。。。

  • 【Access】条件未入力時、全件ヒットするクエリについて

    下記のテーブルがある場合、下記のクエリを実行すると、下記のような結果になります。 条件1. [Forms]![F_Form]![name]に「ル」と入力 →「ベルト」のレコードを抽出 条件2. [Forms]![F_Form]![name]に何も入力しない。 →「ベルト」「ニット」「ズボン」のレコードを抽出 【クエリ】 SELECT * FROM TBL WHERE (((TBL.NAME) Like IIf(Nz([Forms]![F_Form]![name])='','*','*'+Nz([Forms]![F_Form]![name])+'*'))); 【テーブル(TBL)の中身】 ID NAME 1 ベルト 2 ニット 3  4 ズボン 条件1は意図した動作となっていますが、 条件2は意図した動作をしませんでした。 条件2の場合、全件ヒットしたいと思います。 ただ、上記のクエリではNAME列に値が入っていないID=3の値が抽出できませんでした。 その為、条件2の場合、全件ヒットするクエリの書き方をご存知の方がいらっしゃいましたら、 ご教示いただければと思います。 よろしくお願いします。

  • Accessの検索フォームで。

    Accessを使ってデータベースを作成しています。 「テーブル1」があり、これには 名前ID 名前 入力日 チェック項目1 チェック項目2   : とあります。 これをもとに「検索クエリ」を作成しました。 検索クエリの項目は「テーブル1」とまったく同じですが、 すべてを検索するわけではないので ・名前ID  「検索項目なし」 ・名前  「Like IIf(IsNull([Forms]![検索条件入力フォーム]![名前]),[氏名],'*' & [Forms]![検索条件入力フォーム]![名前] & '*') ・入力日  「検索項目なし」 ・チェック項目1  「Like IIf(IsNull([Forms]![検索条件入力フォーム]![チェック項目1]),[チェック項目1],[Forms]![検索条件入力フォーム]![チェック項目1])」 ・チェック項目2  ※上記と同じ。   : としてあります。 この「検索クエリ」をもとに「検索条件入力フォーム」を作成してあります。 名前の欄に「田中」と入力すれば、「田中」がつく人がすべて検索されるというようなカンジになっています。 「テーブル1」に空欄があり、その場合に、検索がうまくいきません。 「検索クエリ」のところですべてに条件を入れればいいのですが、フォームに全てが入っていないので。。。 やはりフォームに「テーブル1」の項目すべてを含め、クエリで条件を入れるべきでしょうか? これが今考えている中では一番手早いようなカンジがするのですが、どうしてもあまりスマートなやり方ではないような気がして。。。 これしかないのであれば、これでやりますが、他にいい方法があれば、教えていただけないでしょうか? あまり上手な文章ではないので、補足要求があれば補足します。 宜しくお願いします。 Ac2000です。

  • ACCESS2003でクエリを使った検索フォームを作っています。

    ACCESS2003でクエリを使った検索フォームを作っています。 クエリは以下の様になっています。 ----------  番号   タイプ   品名  1111   AA     商品1  2222   AA     しょうひん2  3333   BB     商品しょうひん3 ---------- 品名のフィールドの抽出条件に ---------- Like "*" & [Forms]![品名検索フォーム]![品名検索] & "*" ---------- と入れています。 品名検索フォームは帳票タイプで、フォームヘッダーにテキストボックスを設け 「品名検索」と名前をつけています。 テキストボックスに【商品】と入力すれば番号1111と3333が、【しょうひん】と入力すれば 番号2222と3333が抽出されるように設定し、ここはうまく動きました。 ただ、このフォームを開いた際、テキストボックスは空欄になっているため、全レコードが 表示されてしまいます。テキストボックスが空欄の際は、何も表示したくないのですが どこを触ればいいのでしょうか? どうかよろしくお願いいたします。