ACCESSでテキストボックスで検索時エラー出る

このQ&Aのポイント
  • ACCESS2010で顧客名簿を作成し、メインフォームとサブフォームを使用して届け先データを入力しています。
  • 顧客データから氏名を検索するためにテキストボックスを使用していますが、届け先データが空の場合に検索結果が白紙のデータシートビューになります。
  • 届け先データが空の顧客データも多いため、届け先データを持っている顧客データと同様に表示されるようにしたいと考えています。
回答を見る
  • ベストアンサー

続ACCESSでテキストボックスで検索時エラー出る

下の内容で質問をしていたのですが、アカウントに関する問題で、運営側に質問を閉じられてしまいました。 http://soudan1.biglobe.ne.jp/qa7791423.html 問題は無事解決しましたので、もしよろしければ、前回の回答者様に引き続きお手伝い願えれば幸いです。 少し時間が経ち、叶わぬ願いかもしれませんが、どうかよろしくお願いします。 参考のため、二つの画像をアップロードしましたので、設定をご覧いただくとわかりやすいかとおもいます。 http://uploda.cc/img/img50aa013c9997c.jpg http://uploda.cc/img/img50aa011bf2a88.jpg 残念ながらどちらも良い結果は得られていません。 <以下前回投稿内容> ACCESS2010で顧客名簿を作りました。 顧客データテーブルと、届け先のデータテーブルがあります。 これは顧客(依頼主)から商品を発送する送り先(届先)のデータです。 各顧客データに対し、届先データは0から複数まであります。 各顧客データをメインフォームに反映し、その中にサブフォームを作り届け先データを入力してます。 この顧客データから氏名(依頼主氏名)を検索するために、「データで検索」というページをつくり、そこに検索用のテキストボックス「依頼主氏名検索」を用意しました。ここに顧客名を入れて検索しています。 クエリのデザインビューのフィールドに IIf(IsNull([Forms]![データで検索]![依頼主氏名検索]),True,[依頼主名前] Like "*" & [Forms]![データで検索]![依頼主氏名検索] & "*") という式を入れて使用しています。抽出条件に「true」と入れています。 しかし検索結果に、白紙のデータシートビューが出ることがあり困っています。 顧客データ(依頼主データ)は埋まっているのに、 サブフォームのデータ(届先データ)に全くデータが入っていない場合、こうなります。 サブフォームのカラムが一つでも埋まっていれば、希望する検索結果となって顧客データが表れます。 届け先データが空の顧客データも多いのですが、 届け先データを持っている顧客データと同様に表示されるようにしたいです。 そのためには、どこを修正すればよろしいでしょうか。 フィールドに入れた式はネットで検索した様々な参考ページから、拝借したものを入れたもので、自分自身は、なんとなくしかわかりません。一から式を書くことはできません。 式の中に届け先データに触れるような部分が見当たらないので、他の部分に問題があるのではないのだろうか、と考えていますが、見当がつきません。 どうぞお助けくださいますようお願いいたします。 投稿日時 - 2012-11-10 22:40:52

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

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

遅れ馳せながら、前回Q&AのNo.1,3,4の者です(汗) 画像掲載に非対応のパートナーサイトを存在させておいて、 なりすましでもないのに「規約に違反」とはどういうことだ、と 抗議したのですが、締め切りに関しては決定が覆らなかった ようで、力不足、申し訳ありません(汗) 画像を拝見しましたが、この形(=届け先テーブルは結合 させただけでフィールドは追加しない)でもレコードが表示 されない(=依頼主テーブルの依頼主名前が空白のまま)、 ということですと、クエリの問題ではなさそうです(汗) となると、私の推測の範囲で試せることは以下の2つです:  a)提示されたクエリのコピーを作成し、そのデザインビュー   で『届け先テーブル』そのものを削除(=『依頼主テーブル』   だけからクエリを作成)した後、そのクエリをデータシート   ビューで表示  →これでも抽出されないなら、検索に指定した文字に誤字    がある可能性があるので、データを見直す    (『装』と『裝』(上側の『壮』の偏の形が異なる)など、    紛らわしい文字などがないか:私の職場での実例から)  b)フォームをデザインビューで開いて、何もないところを   ダブルクリックするなどしてフォームのプロパティシートを   開いたら、『データ』タブにある(はずの)『読み込み時に   フィルタを適用』の値を確認   ※当方はAccess2007での確認のため、項目名などに    差異がありましたらご容赦願います(汗)  →「はい」になっている場合は、「いいえ」に変更したら   どうなるかを確認   (レコードソースに設定したクエリの抽出条件は、これが    「いいえ」になっていても機能します:    あくまでフォーム上で、右クリックメニューやリボンなど    から行った「一時的に適用したフィルタ」を、読み込み    時に再度適用するかどうかを設定する項目) ※「b」の動作確認は、上記の代わりに、”レコードが表示されない  検索を行った状態で、右クリックメニュー等から「フィルタの  解除」を行う”でもOkです。  (要は、「例えば『Is Not Null』などの余計なフィルタが掛かって   いるために表示されなくなっている」のかどうかを確認できれば   よい、と)。 ・・・以上です。 なお、「b」でレコードが表示されるようになった上で、この 設定は変えたくない、という場合は、『依頼主氏名検索』 テキストボックスの更新後イベントでフィルタの解除を実行 するようにしてください。 (同テキストボックスがメインフォームにあって、サブフォームの  コントロール名(→『ソースオブジェクト』ではなく『名前』の  方)が「埋め込み0」の場合、VBAなら    Me!埋め込み0.Form.FilterOn = False  を実行すればOk) VBAではなく『マクロ』オブジェクトを使用している場合は、 以下を参照してください: http://okwave.jp/qa/q7755304.html

deeeeemo
質問者

お礼

アカウントの方までご尽力いただき誠に、ありがとうございます!!  頭が上がりません。。。 またいつもながら沢山の噛み砕いたご回答、本当にありがとうございました。 しかしながら、現在仕事が繁忙状態に陥り、またこの質問の件の検証が 自分の実力以上の領域に入ってきているのでなかなか進みません。 おそらく自分の知識を最初から洗わないといけないように思いますので、参考書を読み返す必要を感じております。 少しずつ確認いたしますので、補足や進行状況など、ややお時間いただきます。まことに申し訳ありません。

deeeeemo
質問者

補足

幾たびにもわたり、ご回答いただきまして、誠にありがとうございました。 この度のご回答を全て理解するには力不足であったため、分かる範囲で部分的に参考にさせていただき、自分でも試行錯誤を繰り返した結果、当座の満足ができるような仕様になりました。 試したことをご報告させていただきます。 広すぎたであろうフィールド範囲を狭め、届け先フィールドは全てカットしました。そして使用していたクエリを見直しました。どうやらクエリ内の[  ]の内側に入れる語句違いがあったようです。 長い文章で、初心者にもわかるように噛み砕いて伝えていただいたものの、極初歩的な部分での間違いでした。大変恐縮しております。 本当にありがとうございました。もう少しクエリを勉強します。

その他の回答 (5)

  • 30246kiku
  • ベストアンサー率73% (370/504)
回答No.6

メインフォームと、そのメインフォームに組み込んだサブフォームの構成で良かったでしょうか。 前回の回答者ではありませんが、チョッと気になったので。 もし、上記の構成でなかった場合、スルーしてください。 フォームが上記構成であった場合、私なら普通、以下のような構成にすると思います。 新規の accdb で確認してみてください。 環境等の条件) テーブル「TA」があり、 「ID」(長整数:主キー)「名前」(テキスト型)の構成 「TA」のサンプルデータ・・・・(メイン側のデータ) ID 名前 1  aaaa 2  bbbb 3  cccc 4  dddd 5  eeee 6  ffff テーブル「TB」があり、 「an」(オートナンバ:主キー)「ID」(長整数)「住所」(テキスト型)の構成 「TB」のサンプルデータ・・・・(サブ側のデータ) an ID  住所 1  1  AAAA 2  2  BBBB 3  4  DDDD 4  2  BBBB 2 つまり、テーブル「TA」の「ID」が一側、テーブル「TB」の「ID」が多側。 フォームの作成) ・テーブル「TB」を元にフォームウィザードでデータシートとして、「F2」名のフォームを作成 閉じておきます。 ・テーブル「TA」を元にフォームウィザードで単票形式で「F1」を作成し編集モードへ 詳細部分を広げて、出来上がっていたフォーム「F2」をその場所にドラッグ&ドロップ サブフォームとして組み込まれたので、プロパティを参照します。 「名前」は「F2」になっていると思います。 そして、リンク親フィールド/リンク子フィールドには、「ID」が表示されていると思います。 (表示されていなかったら、どちらにも「ID」を記述) この状態で、フォーム「F1」をフォームビューに変更し、メイン側のレコードを移動してみます。 メイン側の「ID」が切り替わることにより、サブフォームの表示も、いろいろと替わっていくと思います。 この動きが、現在の検索機能が無い状況と思われます。 メインのフォーム「F1」はテーブル「TA」を元に、サブのフォームはテーブル「TB」を元に、 そして、メインとサブの表示を同期させるのが、リンク親フィールド/リンク子フィールドになります。 つまり、メインの「ID」とサブの「ID」を一致させた表示にしてよ・・・・ってな設定になります。 実際に、メインにあるけどサブには無い・・・・サブ側では全件表示したい(今回の要求仕様?)・・・ は、上記の構成に手を加えていきます。 今回はここまでの記述とします。(誤解釈の可能性もありますので) 構成等一致し・・・また、もう少し聞いてみたい・・・場合は補足してください。 (その際には、上記は実際にやってみて確認しておいてください) (不要であれば、補足等の記述はいりません)

  • chayamati
  • ベストアンサー率41% (254/607)
回答No.4

試していませんが 目的のフォーム名をF_送り状 として このフォームには検索条件なしで DoCmd.OpenForm "F_送り状"", , ,"依頼主名前 Like "*" & [Forms]![データで検索]![依頼主氏名検索] '"

deeeeemo
質問者

お礼

複数回にわたる詳細なご回答、まことにありがとうございました。 質問しておいて、大変申し訳ないのですが、仕事が繁忙状態に入り、またこの質問の検証も自分の実力以上の領域に入り、最初から勉強のしなおしの必要を感じており、参考書を再度読み返そうとしております。 まことに申し訳ありませんが、検証結果など今少しお時間いただくことにさせてくださいませ。

  • chayamati
  • ベストアンサー率41% (254/607)
回答No.3

追伸 http://uploda.cc/img/img50aa011bf2a88.jpg をよく見ると 依頼主名前が複数ありそうですがこれは何故ですか 依頼主を特定するのにコンボボックスをお勧めします コンボボックスを利用すると依頼主名が依頼主名をふりがな順の プルダウンメニューになり、依頼主件数が100件程度ならこれでいけます。 また件数が多いとこのコンボボックスにふりがなで絞り込みが出来ます

  • chayamati
  • ベストアンサー率41% (254/607)
回答No.2

1.しかし検索結果に、白紙のデータシートビューが出ることがあり困っています。  顧客データ(依頼主データ)は埋まっているのに、  サブフォームのデータ(届先データ)に全くデータが入っていない場合、こうなります。  サブフォームのカラムが一つでも埋まっていれば、希望する検索結果となって顧客データが表れます。 2.届け先データが空の顧客データも多いのですが、  届け先データを持っている顧客データと同様に表示されるようにしたいです。 上記はご質問の内容ですが 2.を満足させるためには届け先が白紙が出て当然ですね  白紙のデータシートが不要なら結合プロパティが  (1)両方のテーブルの結合フィールドが同じ行だけを含める 尚、色々なフォーム(またはレポート)があって あるフォームでは届先データのないものは対象外、 別のフォームでは届先データのないものも対象 とするにはフォーム毎に結合のプロパティーを定めます。 フォーム(またはレポート)をデダインビューで開き プロパティーのレコードソースの右端の … をクリックすると クエリー作成の画面になります。 ここで作成したクエリーは一つのフォームだけのもので、フォームに 必要なフィールドだけ下の枠にドラッグします。 追伸 抽出条件欄は複数行あり、同一行はAND条件 行を変えるとOR条件

  • bin-chan
  • ベストアンサー率33% (1403/4213)
回答No.1

外部サイトに画像載せても、見ないよ > サブフォームのデータ(届先データ)に全くデータが入っていない場合、こうなります。 先にレコードカウントしておくとか。その結果で分岐させる。

関連するQ&A

  • accessでテキストボックスで検索時エラー出る

    ACCESS2010で顧客名簿を作りました。 顧客データテーブルと、届け先のデータテーブルがあります。 これは顧客(依頼主)から商品を発送する送り先(届先)のデータです。 各顧客データに対し、届先データは0から複数まであります。 各顧客データをメインフォームに反映し、その中にサブフォームを作り届け先データを入力してます。 この顧客データから氏名(依頼主氏名)を検索するために、「データで検索」というページをつくり、そこに検索用のテキストボックス「依頼主氏名検索」を用意しました。ここに顧客名を入れて検索しています。 クエリのデザインビューのフィールドに IIf(IsNull([Forms]![データで検索]![依頼主氏名検索]),True,[依頼主名前] Like "*" & [Forms]![データで検索]![依頼主氏名検索] & "*") という式を入れて使用しています。抽出条件に「true」と入れています。 しかし検索結果に、白紙のデータシートビューが出ることがあり困っています。 顧客データ(依頼主データ)は埋まっているのに、 サブフォームのデータ(届先データ)に全くデータが入っていない場合、こうなります。 サブフォームのカラムが一つでも埋まっていれば、希望する検索結果となって顧客データが表れます。 届け先データが空の顧客データも多いのですが、 届け先データを持っている顧客データと同様に表示されるようにしたいです。 そのためには、どこを修正すればよろしいでしょうか。 フィールドに入れた式はネットで検索した様々な参考ページから、拝借したものを入れたもので、自分自身は、なんとなくしかわかりません。一から式を書くことはできません。 式の中に届け先データに触れるような部分が見当たらないので、他の部分に問題があるのではないのだろうか、と考えていますが、見当がつきません。 どうぞお助けくださいますようお願いいたします。

  • Accessのフィルター機能について質問です。

    こんにちは。 以前に http://okwave.jp/qa/q7072953.html で「別フォームから主フォームに反映」という質問をさせていただいた者です。 「  With Forms("F01-1")     .Filter = "顧客コード = " & Me!顧客コード     .FilterOn = True   End With  」 というコードを検索フォーム(別フォーム)に記入することにより、 主フォーム上に検索フォームで選択したものが表示されるようになりました。 ※検索フォームにおけるデータの追加・変更・削除等は行えません。 上の質問での設定を前提で質問なのですが、どうかどなたかお答えください。 検索フォームから主フォームに、絞り込み検索が行えるようになったのですが、 主フォームの検索結果を(主フォーム上の)サブフォームに影響させないようにするには どうしたら良いのでしょうか? 主フォームのレコードが変わっても、サブフォームは常に新規登録状態にしておきたい ということです。 説明が足りないところもあるかと思いますが、よろしくお願いいたします。

  • アクセス2000でクエリを組んだのですが。。。

    こんにちわ。アクセス初心者です。まず順に追って説明します。 (1)15000件ある顧客名簿と1500件ある担当会社のテーブルをリレーションで結び、クエリを組みました。「Q_顧客名簿」と名づけました。その時点で15000件データが存在します。 (2)フォーム「Q_顧客名簿」を元にフォームを作成しました。そして氏名の曖昧検索をしたいのでまずフォームのテキストボックスに「氏名検索」と名づけて、クエリの画面に戻り「Q_顧客名簿」を元に新たなクエリを組み、「氏名」のフィールドの抽出方法に以下のような文を入れました。 『Like "*" & [forms]![集合フォーム_1]![氏名検索] & "*"』 このクエリを「Q_氏名検索」と名づけました。 (3)フォームの左端をに「Q_氏名検索」が生きるよう設定をし、「氏名検索」のテキストボックスに「再クエリ」を組んだのですが、顧客データ数が15000あるはずなのが11000まで減ってしまいました。 おそらく検索式に何かが足りないのだと思うのですが、SQLやVBAがわからないのでどうすればいいかわかりません。 アクセスの詳しい方、教えていただけませんでしょうか?よろしくお願いいたします。

  • アクセス2003の検索クエリーについて

    今、アクセス2003で色々勉強しています。 氏名とか住所はクエリーの曖昧検索で式を書いて動いたのですが。 期間・・何年何月何日~何年何月何日で検索する式がわかりません。 どのような式を書けばいいのでしょうか? ちなみに曖昧検索はIIf(IsNull([Forms]![検索画面]![住所]),True,[住所] Like "*" & [Forms]![検索画面]![住所] & "*")と書いて動きました。 うまく表現が出来ないので、わからないかもしれませんがよろしくお願いします。

  • Access テキストボックスを使用した範囲検索

    タイトルどおりの操作について教えてください。 Access VBAは、ごく簡単な操作が理解できる程度のレベルです。 Accessのフォームにテキストボックスを二つ作成し、 それぞれに金額を入力します。 その範囲結果をBetween And 演算子で抽出し ふたつめのボックスには空文字はパスにしたいと思います。 以下の式を作成しましたが、実行しようとすると、 「Me.キーワードの使用が不正です」と出ます。 複雑な式ではないと思うのですが、何がいけないのでしょうか。 どうか教えてください。 ------------------------------------------------ Sub 検索_Click() Me.Fliter = "[金額] Between [Forms]![F_金額で検索]![金額1] And [Forms]![F_金額で検索]![金額2] Is Null" Me.FilterOn = True End Sub

  • Accessのテキストボックスとコンボボックスの違い

    フォームにテキストボックスを3ケ用意し、テキストボックス名をtxt1,txt2,txt3としました。これにコマンドスイッチを作成し、機能を再クエリと設定しました。 フォームのサブフォームに再クエリの結果を表示するようにしました。 クエリのテキストボックス1の抽出条件は 条件  [Forms]![フォーム名]![txt1] または [Forms]![フォーム名]![txt1] Is Null    [Forms]![フォーム名]![txt1] Is Null テキストボックス2の抽出条件は 条件  [Forms]![フォーム名]![txt2] Is Null または [Forms]![フォーム名]![txt2]  [Forms]![フォーム名]![txt2] Is Null テキストボックス3の抽出条件は 条件  [Forms]![フォーム名]![txt3] Is Null または [Forms]![フォーム名]![txt3] Is Null [Forms]![フォーム名]![txt3] と設定し、テキストボックスにデータを入力し実行すると 正しい結果が得られるのですが、テキストボックスをコンボボックスに変更し、コンボボックス名をtxt1,txt2,txt3 とすると、抽出されません。 コンボボックスをテキストボックスのように扱うのには どうするのでしょうか。教えてください。

  • ACCESS サブフォームでのエラー

    教えて下さい。 MENU画面(F_MENU)で、本日の年月を入力し、 MENU画面上の前年同月フィールドに、「200704」と表示させています。 その後、別フォーム(F_TOP)を開きコンボボックスで選択した条件で、サブフォーム(F_明細)を絞り込んでいます。 そのサブフォームには、非連結フィールドをつくり コントロール名には、以下を設定しています。 =[Forms]![F_検索_TOP]!F_検索_明細.Form!Controls([Forms]![F_MENU]![前年同月]) そして、F_TOPを開き、コンボボックスで選択すると、 絞り込まれたデータの1件目にのみ、検索結果が表示されます。 (後は、#Error) コンボボックスでどの検索条件にしても、最初の1件目のみ 表示されます。 サブフォームの元になっているデータには、 200704、200705、と年月別に実績が蓄積されており、 F_TOPで入力した日付から前年のフィールドを表示させる  ということが希望です。 なんだか、わかりずらい説明ですが、 このような現象を回避できる方法はありませんか?

  • アクセスである文字を含む検索

    ACCESS2000を使っています。 あるデータテーブル「発注書テーブル」があって、ここでは「(1)ID」「(2)顧客名(法人)」「(3)発注商品」「(4)納品済チェック」の4つフィールドがあるとします。 作業はフォームで行います。フォーム名は「発注書フォーム」。 「(2)顧客名」から検索をかけたくて、検索コマンドボタンをつくり、「検索フォーム」を発注書フォームとまったく同じ形態でつくり、そこにとべるようにしました。 「検索フォーム」には「検索」というテキストボックスを作ります。 「検索クエリ」というクエリを作り、発注書テーブルを素とし、すべてをデザインビューで表示するようにしました。 そして、「(2)顧客名」の抽出条件に[Forms]![検索フォーム]![検索]を入力します。 すると、「検索フォーム」の「検索」をコンボボックスにして、顧客名をすべて表示させ選択した場合は、「検索フォーム」では、選択した顧客の情報が表示されるようになりました。 が、しかし、「検索」をコンボボックスではなく、テキストボックスで、しかも顧客名の一部だけを入力したら、その文字を含むすべてのレコードを表示してほしいのです。 そこで、「検索クエリ」の「(2)顧客名」抽出条件にlike"*[Forms]![検索フォーム]![検索]*"と入力してみました。 そして「検索フォーム」の「検索」テキストボックス(非連結)に顧客名の一部を入力したところ、ぜんぜん絞りこみ抽出してくれません。 もちろん、クエリ上でも絞り込んでいない模様です。 どうしたら文字の一部からその文字を含む顧客名のレコードを全て抽出し、表示させることができるでしょうか? 細かくてすみませんが、かなり困ってます。 どうかわかる方、教えてください。 まったくちがう方法(別の手法)でもかまいません。 この説明でわからない部分がありましたら補足しますのできいてください。 よろしくお願いします。

  • アクセスでフォームからサブフォームへの検索について

    アクセスを勉強中の初心者です。是非教えて下さい。 請求書入力フォームを作成したので、別のフォームで請求書一覧を作成しています。その請求書一覧は、サブフォームにデータシート形式で[請求No.]、[年]、[月][社名]、[金額]が一覧にでるようになっています。その元になっているクエリの条件のところに、[年]→Like [Forms]![請求一覧]![年検索] & "*" [月]→Like "*" & [Forms]![請求一覧]![月検索] & "*" [社名]→Like "*" & [Forms]![請求一覧]![社名検索] & "*" を入力しています。 ここからですが、サブフォームの上に[年検索][月検索][社名検索]のコンボボックスと[検索ボタン]があって、それぞれコンボボックスから選択後、ボタンを押したら、その対象の年や月、もしくは社名に沿ったデータがサブフォームに出るようにしたいのです。検索ボタンのクリックイベント後のところにどういう命令文を書けばいいのでしょうか。マクロの再クリエなどで設定してもどうにもなりません。マクロもVBAがまだ理解できていないので、教えていただければ幸いです。よろしくお願い致します。

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

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

専門家に質問してみよう