• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Access2007でフォームのリストボックスから)

Access2007でフォームのリストボックスから選択したフィールドをクエリする方法

このQ&Aのポイント
  • Access2007でフォームのリストボックスから選択したフィールドをクエリする方法についてご質問いただきました。
  • テーブル数は10個くらいあり、全テーブルのフィールド数は100超あります。テーブル1に一意のIDがあり、他のテーブルとリレーションシップで繋いでいます。
  • 現在、現在のVBAに問題があり、選択したフィールドのデータにNull以外のデータのみを表示することができません。1ヶ月以上悩んでいるとのことで、別の方法で解決できないか考えているそうです。

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

  • ベストアンサー
  • nicotinism
  • ベストアンサー率70% (1019/1452)
回答No.2

テキスト型フィールドの場合、空文字列の許可が有効になっていると Null だけではなく、"" が入っている場合があります。 手作業でクエリに「空白に等しくない」フィルターを設定し、デザインビューでプロパティを見ると フィルターには、 ([クエリ1].[フィールド] Is Not Null AND [クエリ1].[フィールド]<>"") となっているのが確認できます。 http://support.microsoft.com/kb/883247/ja なので、DoCmd.ApplyFilter "抽出結果" & strDate, "('" & F_name(i - 1) & "') Is Not Null" を上記のような形に変更する必要がありそうです。 ただし、フィルター条件が多くなると、何らかの制限に引っかかりそうです。 ヘルプやWEB検索でも見つけられませんでしたが http://www.pal-stock.co.jp/access.html 必ず潜んでいるハズ?です(多分)(^_^;) それと、"抽出結果" & strDate でクエリ名を指定しているつもりなのでしょうけど DoCmd.ApplyFilter が適用されるのは最前面(アクティブ)になっているオブジェクトに対してです。 別のクエリやフォームが最前面ならそっちに適用されてしまいます。 docmd.SelectObject acQuery ・・・で回避できるかな? 以上を考えて、 試したわけではありませんが、クエリのSQL文を動的に変えて、 WHERE句を連結する方法もあるかと思います。 currentdb.querydefs("クエリ名").sql でSQL文が SELECT 分類.番号, 細分.[タイトル], 細分.内部リンク FROM 分類 LEFT JOIN 細分 ON 分類.番号 = 細分.分野; みたいのが得られますので、; をLeftかInstrなどで取り除いて WHERE句をつなげて、そのSQL文をcurrentdb.querydefs("クエリ名").sql = SQL文 も考えてみてください。 以上、ご参考までということで。

hohonohoo
質問者

お礼

回答ありがとうございました。 きっと、この様なデータベース例はまれなんでしょうね。。 最初は正規化もしなくていいんじゃないかって言われましたし。 結局作り直すことになり、まだ奮闘中ですがこれからの作業にも 参考にさせていただきます! WHERE句連結部のVBA記述が難しそうですが、頑張って勉強 しようと思います。 また質問するかもしれませんが、どうかご教授お願いします!

その他の回答 (1)

  • chayamati
  • ベストアンサー率41% (260/624)
回答No.1

不都合なレコードを残したまま表示だけで回避しようとしていますね いつまでも困難なトラブルが続きます。 「不都合なレコード(フィールド)は受け付けない」と考え方を変えてください この手段はテーブル設計段階でフィールドのプロパティーで、ある程度可能です。 フィールドのプロパティーはテーブルのデザインビューで定義します。 0.データ型   テキスト型、メモ型、数値型、日付/時刻型、オートナンバー型、Yes/No型、 1.フィールドサイズ 2.規定値 数値項目に空白または文字があれば集計は出来ない   例えば 数t項目であれば0、文字項目の性別には"男" 3.入力規則 入力する値の制限   例 【>100 And <1000】,【="男”or ="女"】 4.値要求 【はい】とすると空白は許されない 5.空文字列の許可 【いいえ】とすると空白は許されない 6.インデックス 【重複なし】   会社名、品名等に適用出来そうですが別のフィールドで部署名、規格があればダメ 以上を定義しておくとテーブル、フォームからの入力は出来なくなります またエクセルのデータ等をインポートすると不都合なレコードははじき出されます 既存のテーブルのレコードに不都合なレコードはプロパティーに違反していても 除去してくれませんので 1.テーブルをコピペしてテスト用のテーブルを作成 2.コピーのテーブルのレコードを全て除去 3.フィールドのプロパティーの定義 4.既存のテーブルよりインポート これで、フィールドのプロパティーに違反しているレコードははじき出されます

hohonohoo
質問者

お礼

早速のご回答ありがとうございました。 その後、結局作り直すことになりました>< 100個以上のフィールドがあるためchayamatiさんの確認方法だと ひとつひとつ0~6を確認するのはとても時間がかかってしまいますTT しかし、とても勉強になりました! ありがとうございます。

関連するQ&A

専門家に質問してみよう