Accessオプションボタンで検索対象切替

このQ&Aのポイント
  • Accessのフォームにテキストボックスを利用した検索画面を配置し、検索対象を「テーブルから」か「クエリから」か選べるようにする方法について教えてください。
  • 現在、商品情報を元データとして持つテーブルと、テーブルを参照して変更後のデータを表示するクエリがあります。この関係のデータが複数あり、それぞれのテーブルにまとめる方法も検討しています。
  • Access2003を使用している環境で、オプションボタンのコントロールソースに式を設定する際につまづいています。また、同じテーブル内に元データと変更後のデータを保存しないとオプションボタンが機能しないのか疑問です。他に検索対象を切り替える方法についても教えてください。
回答を見る
  • ベストアンサー

Access オプションボタンで検索対象の切替

▼やりたい事 フォームにテキストボックスを利用した検索画面を配置しております。 ここにキーワードを入れて商品の検索をするのですがこの時、検索対象を「テーブルから」か「クエリから」か選べるようにオプションボタンを作りたいと考えております。 ▼現状のデータ 【テーブルA】:商品情報の元データです。 【クエリA】:商品情報変更後のデータです。テーブルAを参照して変更後のデータに見せています。 テーブルとそれを参照しているクエリのフィールドは同じです。 テーブルAのフィールド1が「n」の時、クエリAのフィールド1は「フィールド1: "d"」のようにしています。 理由は元データと変更後のデータ、別で持つとテーブル数が30以上できる為、分かりづらいと思ったからです。 また、今後商品が増えた際に、元データを追加するだけで変更後のデータとしてクエリで見せかける事ができる為です。 例ではテーブルAとクエリAの存在しか明示しておりませんが、このような関係のデータが複数あり、内容もテーブルAとテーブルB…では違う為、1つのテーブルにまとめるような事も考えておりません。 ▼質問 オプショングループを作成し、共通フィールド2のオプション値をテーブルは「0」、クエリは「1」としたのですが、オプショングループのコントロールソースに当てはまる式をどう書けばいいのかつまづいてしまいました。 元データと変更後データを同じテーブル内に保存しないとオプションボタンは機能しないのでしょうか? また、他に検索対象を「テーブルから」か「クエリから」か選べるようにするにはどんな方法がありますか? 参考になるWEBページ、書籍、又は作成する上でのヒントをいただけましたら幸いです。 作業環境は、OS:Windws7、使用ソフト:Access2003です。 宜しくお願い致します。

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

  • ベストアンサー
回答No.4

補足: CutStr()の処理の流れ Public Function CutStr(ByVal Text As String, _             ByVal Separator As String, _             ByVal N As Integer) As String   Dim M AS Integer   Dim strDatas() As String   Dim strReturn AS String      '   ' strDatas(0)に""が代入されるようにTEXTを加工   ' その後、Text を区切り子で分割して配列に代入   '   strDatas = Split("" & Separator & Text, Separator, , 0)   '   ' strDatas()の配列の数を変数Mに代入   '   M = UBound(strDatas)   IF M <= N THEN     '     ' N が配列の数をオーバーしていない時は指定の値を戻り値にセット     '     strReturn = strDatas(N)   ELSE     '     ' N が配列の数をオーバーしていれば""を戻り値にセット     '     strReturn = ""   END IF   CutStr = strReturn End Function IF-THEN処理は、論理式を使うことで完結に書けます。標準モジュールの自作関数は、短い・速いが命ですから、先のCutStr()ように論理式で書いています。しかし、通常のアプリケーションのプログラムコードは<初心者でも見ただけで判る>がモットウ。ですから、通常は補足のような書き方をお薦めします。

lotus2014
質問者

お礼

この2日、ずっと読み解いていたのですが、すみません…全然読み解けませんでした。 かろうじて分かったのはこの補足として書いて頂いたコードを効率的に書いたものが、回答No.1でお答えいただいたコードだという事だけです。 「Dim M AS Integer」がMを代入させるものとし(変数?)、「M = UBound(strDatas)」が、Mに代入された値を示してる(引数?)、のような事をして処理してるのかなー?というのをなんとなく感じただけで、理解までは追いつきませんでした。 とりあえずコピペしてみて触ってみようにも、恐らく私か元々設定していたフォーム自体がうまく関連づけられてないのか現時点ではうまく動きませんでした。 お忙しいところ何度もお返事いただいて、尚且つ解りやすく説明も入れて下さったのに本当に申し訳ございません。 もう少し基本的な事を勉強してから再度チャレンジしてみようと思います! ありがとうございました。

その他の回答 (4)

回答No.5

X  IF M <= N THEN O  IF N <= M THEN 勉強中ということなので晩酌しながら補足を書いたが、見事に間違っていました。

lotus2014
質問者

補足

わざわざ説明までしていただいて ありがとうございます。 周りにAccessが使える人がいないのでとても嬉しいです!! 仕事の合間に、書いていただいたVBAを調べながら理解しようとしたのですが本日は忙しくてなかなか進みませんでした… 試してみたらお礼の方で報告しますね。

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

ACCESSでは、テーブルとクエリは、等価的で、クエリのテーブル化もできる。 利用するとき、どちらでを指定しても、変える部分が無いようにしてある。それがよい点の一つでしょう。 ファイル形式のような、内容の差ではないと思うので、データの中身(来歴、時点、沿革など)をしっかりつかんで、テーブルやクエリの名前をしっかり(命名、利用)を自己管理しないとならない、(アクセスは)ソフトでしょう。 VBAでもできれば、From句などの部分を、時宜に合わせて変更できるクエリなどは組めばよいかも。 アクセス程度のソフトレベルでは(大規模のデータベース処理と違って)、アクセスは個人課題処理ユースから始まっていて、ファイル群の全体を管理する(消去も含めて)ソフトなどは考えられていないのでは。質問は個人でなく、会社のデータでしょうが、専門家に相談すべき課題と思う.顧客がらみ、金銭がらみなどのファイルが多くて、似たような名前のファイル名だと、どのファイルを使うべきか、管理ツールででも助力しないと、間違えて、えらいことになる恐れがある。 私の思い付きだが、「ファイル管理ソフト」で照会して、何を問題にしているか勉強しては。 無料のこういうコーナーに相談して、(近い)将来とも解決できる程度の問題か。 ーー 質問の課題の捉え方について、私が間違ってる場合は後免。無視してください。

lotus2014
質問者

お礼

回答ありがとうございます。 仰るとおり業務使用を目的として作成しておりました。 本来なら外注に出すべき案件だと私も思いますが、そう簡単に経費がでるわけでもなく… (とは言え、知識のない私がAccessを触っている間の時給と外注に出す金額を考えると、外注に出す事によって安く済む場合もあるし後々も運用できるのに…とは思います) tamu1129様の回答を受け、構造を最初から考え直してみたのですが、私の解る範囲で少し前へ進めそうな予感がしてきました。 ファイル管理ソフトは私も愛用しているものがありますが、とにかく色んな事ができますよね。 参考になるような処理があるのか、またその仕組みを参考に出来る自頭があるのか… とにかくヘルプでも見て、参考になりそうなものがないか探して見ます! ありがとうございました。

  • tamu1129
  • ベストアンサー率58% (1221/2081)
回答No.2

オプションボタンでの切り替え方法は f_a_007 さんが提示してくれているので、その部分はコメントしませんが、そもそもテーブルとクエリを切り替える意味がわかりません クエリの実態はテーブルそのものです レコーダーやプレイヤーで自分が再生したい曲順などを指定する時に、プレイリストを作成します あれと同じで、クエリは複数のテーブルから必要なデータを集めたり、1つのテーブルでもっているフィールドの1部を抽出する時などに使用する物です クエリで変更後のデータなんて言ってますが、そのクエリでデータ書き換えてしまえば、変更されるのはテーブルのデータその物が書き換わってしまうのですよ >理由は元データと変更後のデータ、別で持つとテーブル数が30以上できる為 なぜ? この部分が変です テーブルとクエリの関係が理解出来ていないのでは?

lotus2014
質問者

お礼

回答ありがとうございます。 仰っている通り、正しい使い方ではない事は理解しております。 力技で「選択クエリで変更後データに見せかける事」ができてしまった為、どんどんイレギュラーな使い方を良しとしてしまっていたようです… 今一度、構造を考え直してみます! ありがとうございました。

回答No.1

添付図では、CutStr()の3つめの引数=1の時はテーブル[A]からデータを抽出し、引数=2の時はクエリ[A クエリ]からデータを抽出しています。 Public Function CutStr(ByVal Text As String, _             ByVal Separator As String, _             ByVal N As Integer) As String   Dim strDatas() As String      strDatas = Split("" & Separator & Text, Separator, , 0)   CutStr = strDatas(N * Abs(N <= UBound(strDatas))) End Function

lotus2014
質問者

お礼

折角つくったので~と少し意固地になっておりましたが、tamu1129様の回答を受け、構造を最初から考え直す事にしました。 とは言え、f_a_007様に書いていただいたコードも試してみたいと思っております。 理解できるような次元ではまだない為、少しずつ調べている最中です。 BVAが書けるようになると出来ることが広がりそうですね! ありがとうございました。

関連するQ&A

  • アクセス フォームに検索ボタンをつくりたい

    クエリからフォームをウィザードで作成しました。 このフォームではマウスのスクロールでデータが次々と変わるのですが、 特定の顧客を検索する事が出来ません。 このフォームの中に検索できるボタンを作りたいのですが 何せ初心者の為、ネットで検索してみましたがわかりませんでした。 お教えいただけましたら助かります。 ちなみにデータは5万件 検索かけるフィールド名は“ID” クエリからフォームをつくりました。クエリ名は“検索用”です。 アクセスは97です。 よろしくお願い致します。

  • Accessのオプションボタン

    accessのオプションボタンのコントロールについて教えてください。 フォームでテーブルのデータ項目Aを画面表示しオプションボタンを配置しました。オプションボタンのコントロールソースはデータ項目Bにしています。ボタンを押すとテーブルのデータ項目Bにー1が入ります。しかし、ボタンを押して黒くなってもデータにー1が反映されない場合があります。他の行にコントロールを移動させないと変更がされません。画面とテーブルのデータの同期を取るにはどうしたらよろしいでしょうか? ご指導ください。 よろしくお願いいたします。

  • access2003で軽快な検索クエリを作るには?

    access2003で検索フォームを作成しています。 リレーションの結ばれた複数のテーブルを対象に、検索語句による検索をしようとクエリを作っています。 基本となるテーブルには数値(ID)が中心となっており、それらの実際の値をDlookUpで参照して結果を作っています。 この際に、DlookUpで指定した参照元について抽出条件を設定すると異様に時間が掛かり、実用的ではなくなってしまいました。 テーブルの構成上、DlookUpを使わざるを得ないので、その参照元も含めて検索語句で抽出できるようにしたいのですが、 どのようにすればレスポンスの良い検索クエリができますでしょうか。

  • オプションボタン access2003

    いつもお世話になっております 既存のデータベースからaccessを使って検索を行っています 表示させるテーブルの中で 四種類いずれかの文字列が入力されているフィールドがあります それをフォームで表示する際にオプションボタンで表示させたいのですが どのようにすればよいのでしょうか? (四つのオプションボタンいずれかにチェックが入る形にしたい) ご存知の方よろしくお願いいたします

  • Accessでのあいまい検索について

    Access2010の使用者で&初心者です。 クエリの抽出条件に別テーブルのフィールドを文字列検索させ、その文字列が含まれていた場合は、その文字列を別フィールドに抜き出すというクエリを作成したいのですが・・ ・検索したいテーブル(T商品情報) ・年月日 ・品目情報 ・検索する文字列が入ったテーブル(T品目) ・検索文字 検索したいテーブル(T商品情報)の「品目情報」から、検索する文字列が入ったテーブル(T品目)の「検索文字」を検索し、その検索文字列が含まれていた場合は別フィールにその検索文字列を抽出。という作業を行いたく思っております。 例 ---------------------------T商品情報 年月日|品目情報 20010/8/10|武田様より、口頭にてもも大を53個受け付けました 20010/8/10|上坂様より、電話にてりんごを3個受け付けました 20010/8/10|木村様より、電話にてももを3個受け付けました --------------------------- ---------------------------T品目 検索文字 もも大 りんご もも --------------------------- ↓ ---------------------------クエリ 年月日|品目情報 | 検索文字 20010/8/10|武田様より、口頭にてもも大を53個受け付けました|もも大 20010/8/10|上坂様より、電話にてりんごを3個受け付けました|りんご 20010/8/10|木村様より、電話にてももを3個受け付けました|もも --------------------------- このようなクエリ結果を望んでおります。文章の中から商品名を抜き出し、その抜き出した商品に価格をひもづけたいのです。このようなことをクエリで行えますでしょうか?

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

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

  • Access複数フィールドを対象とした検索

    こんにちは。下記内容での質問です。 Accessで複数フィールドを対象とした検索フォーム?検索テキストボックス?検索ボタン?のような機能を追加したいのですが…。 [注文テーブル]     注文ID:オートナンバー型 納期:日付/時刻型 注文No.:テキスト型 数量:数値型 [製番テーブル] 製番ID:オートナンバー型 注番ID:数値型 製番1:テキスト型 製番2:テキスト型 製番3:テキスト型 と二つのテーブルがあり、メイン(注文テーブル)/サブ(製番テーブル)フォームで注文IDをリンクフィールドとしています。 一つの注文が3個口です。製品に製番シールをそれぞれ貼って出荷するので、製番シールを参照してメイン/サブフォームから[製番1~3]に後から手入力して管理してます。 製番はアルファベットと数字の組み合わせで6ケタです。例)AB1234 そこで、ある製番一つを変更したい時に、どの注文の[製番1~3]に入っているか分からない旧製番を検索して新製番に変更する時があります。 出来ればVBAをあまり使わずに、"複数フィールドを対象にパラメータ入力"などして検索したいのですが…。 新たに検索クエリ/検索フォームを作成して検索・編集出来るクエリ/フォームを作成する感じでしょうか? 何卒、宜しくお願い致します。

  • ACCESSのオプションボタンで検索させたい

    お世話になります 例:下記にオプションボタンがあるとします フォーム ○大阪 ○京都 ○奈良 実行ボタン テーブル ID|市  |配送者| 1 |大阪市|太郎 | eto・・・・・・ 大阪にチェックを入れ実行ボタンを入力すると大阪府にある市町村を検出させたいのですがわかる方よろしくお願いします。 又、あくまで例ですので検索対象値はそんなに多くはないです

  • アクセス・選択クエリについて

    アクセス・選択クエリについて こんにちは。現在、選択クエリについて悩んでおります。 テーブルAとテーブルBからそれぞれ3つのフィールドを選び、選択クエリを作成。しかし、出来上がったクエリのデータシートには一切データが表示されていません。ならばと思い、テーブルAからだけ3つのフィールドを選びクエリを表示させると、きちんと表示します。テーブルA,テーブルBには当然主キーが設定されていますが、その事と関係するのでしょうか?ご存知の方、どうか教えてください。宜しくお願い致します。

  • アクセス2003で検索条件と検索キーワード検索

    アクセス2003で検索機能を作りたいです。 まずプルダウンで検索条件を選び、さらに検索キーワードを手入力し、その条件に見合ったものを抽出するという形。 検索条件とは、フィールド名。検索キーワードは、フィールドの中にある言葉。 質問 (1)マクロのフィルタの実行のwhere条件式において 〔フィールド名〕like~と入れているのですが、この頭のフィールド名をいじくれば良いのか? (2)ある識者に伺ったところ、次のVBA(イベントビルダ)を教わりましたが、オブジェクトに値を代入できませんと出てきました。 Me.filter=""&Me.![テキスト名1]&"like'"&"*"&Me![テキスト名2]&"*"&"'" Me.filterOn=True このテキスト名1をコンボに変更しました(非連結)。検索条件となるあるテーブルを値ソースとしています。何か自分が間違っていますか? できれば、クエリを使うことなく行きたい。 アクセスのつくりとしては、 基幹となるテーブルAとそれに1対多にあるテーブルBそしてテーブルBと1対1にあるテーブルCの3つをクエリを用いて1つのフォームに表しています。 その中のいくつかのフィールドを選択条件とし(プルダウンで選ぶ)、キーワード入力する。 小職、アクセスを始めたばかりです。どうかよろしくお願いいたします

専門家に質問してみよう