プロが教える店舗&オフィスのセキュリティ対策術

下の内容で質問をしていたのですが、アカウントに関する問題で、運営側に質問を閉じられてしまいました。
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

A 回答 (6件)

遅れ馳せながら、前回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://oshiete.goo.ne.jp/qa/7755304.html

この回答への補足

幾たびにもわたり、ご回答いただきまして、誠にありがとうございました。

この度のご回答を全て理解するには力不足であったため、分かる範囲で部分的に参考にさせていただき、自分でも試行錯誤を繰り返した結果、当座の満足ができるような仕様になりました。

試したことをご報告させていただきます。

広すぎたであろうフィールド範囲を狭め、届け先フィールドは全てカットしました。そして使用していたクエリを見直しました。どうやらクエリ内の[  ]の内側に入れる語句違いがあったようです。

長い文章で、初心者にもわかるように噛み砕いて伝えていただいたものの、極初歩的な部分での間違いでした。大変恐縮しております。

本当にありがとうございました。もう少しクエリを勉強します。

補足日時:2013/02/12 17:15
    • good
    • 0
この回答へのお礼

アカウントの方までご尽力いただき誠に、ありがとうございます!! 
頭が上がりません。。。

またいつもながら沢山の噛み砕いたご回答、本当にありがとうございました。
しかしながら、現在仕事が繁忙状態に陥り、またこの質問の件の検証が
自分の実力以上の領域に入ってきているのでなかなか進みません。

おそらく自分の知識を最初から洗わないといけないように思いますので、参考書を読み返す必要を感じております。

少しずつ確認いたしますので、補足や進行状況など、ややお時間いただきます。まことに申し訳ありません。

お礼日時:2012/11/23 18:01

メインフォームと、そのメインフォームに組み込んだサブフォームの構成で良かったでしょうか。


前回の回答者ではありませんが、チョッと気になったので。

もし、上記の構成でなかった場合、スルーしてください。


フォームが上記構成であった場合、私なら普通、以下のような構成にすると思います。
新規の 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」を一致させた表示にしてよ・・・・ってな設定になります。

実際に、メインにあるけどサブには無い・・・・サブ側では全件表示したい(今回の要求仕様?)・・・
は、上記の構成に手を加えていきます。

今回はここまでの記述とします。(誤解釈の可能性もありますので)

構成等一致し・・・また、もう少し聞いてみたい・・・場合は補足してください。
(その際には、上記は実際にやってみて確認しておいてください)
(不要であれば、補足等の記述はいりません)
    • good
    • 0

試していませんが



目的のフォーム名をF_送り状 として このフォームには検索条件なしで

DoCmd.OpenForm "F_送り状"", , ,"依頼主名前 Like "*" & [Forms]![データで検索]![依頼主氏名検索] '"
    • good
    • 0
この回答へのお礼

複数回にわたる詳細なご回答、まことにありがとうございました。

質問しておいて、大変申し訳ないのですが、仕事が繁忙状態に入り、またこの質問の検証も自分の実力以上の領域に入り、最初から勉強のしなおしの必要を感じており、参考書を再度読み返そうとしております。

まことに申し訳ありませんが、検証結果など今少しお時間いただくことにさせてくださいませ。

お礼日時:2012/11/23 18:03

追伸


http://uploda.cc/img/img50aa011bf2a88.jpg をよく見ると
依頼主名前が複数ありそうですがこれは何故ですか

依頼主を特定するのにコンボボックスをお勧めします
コンボボックスを利用すると依頼主名が依頼主名をふりがな順の
プルダウンメニューになり、依頼主件数が100件程度ならこれでいけます。
また件数が多いとこのコンボボックスにふりがなで絞り込みが出来ます
「続ACCESSでテキストボックスで検索時」の回答画像3
    • good
    • 0

1.しかし検索結果に、白紙のデータシートビューが出ることがあり困っています。


 顧客データ(依頼主データ)は埋まっているのに、
 サブフォームのデータ(届先データ)に全くデータが入っていない場合、こうなります。
 サブフォームのカラムが一つでも埋まっていれば、希望する検索結果となって顧客データが表れます。

2.届け先データが空の顧客データも多いのですが、
 届け先データを持っている顧客データと同様に表示されるようにしたいです。

上記はご質問の内容ですが
2.を満足させるためには届け先が白紙が出て当然ですね
 白紙のデータシートが不要なら結合プロパティが
 (1)両方のテーブルの結合フィールドが同じ行だけを含める

尚、色々なフォーム(またはレポート)があって
あるフォームでは届先データのないものは対象外、
別のフォームでは届先データのないものも対象
とするにはフォーム毎に結合のプロパティーを定めます。

フォーム(またはレポート)をデダインビューで開き
プロパティーのレコードソースの右端の … をクリックすると
クエリー作成の画面になります。
ここで作成したクエリーは一つのフォームだけのもので、フォームに
必要なフィールドだけ下の枠にドラッグします。

追伸
抽出条件欄は複数行あり、同一行はAND条件 行を変えるとOR条件
    • good
    • 0

外部サイトに画像載せても、見ないよ



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

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!