- ベストアンサー
Accessオプションボタンで検索対象切替
- Accessのフォームにテキストボックスを利用した検索画面を配置し、検索対象を「テーブルから」か「クエリから」か選べるようにする方法について教えてください。
- 現在、商品情報を元データとして持つテーブルと、テーブルを参照して変更後のデータを表示するクエリがあります。この関係のデータが複数あり、それぞれのテーブルにまとめる方法も検討しています。
- Access2003を使用している環境で、オプションボタンのコントロールソースに式を設定する際につまづいています。また、同じテーブル内に元データと変更後のデータを保存しないとオプションボタンが機能しないのか疑問です。他に検索対象を切り替える方法についても教えてください。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
補足: 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()ように論理式で書いています。しかし、通常のアプリケーションのプログラムコードは<初心者でも見ただけで判る>がモットウ。ですから、通常は補足のような書き方をお薦めします。
その他の回答 (4)
- 山田 太郎(@f_a_007)
- ベストアンサー率20% (955/4574)
X IF M <= N THEN O IF N <= M THEN 勉強中ということなので晩酌しながら補足を書いたが、見事に間違っていました。
補足
わざわざ説明までしていただいて ありがとうございます。 周りにAccessが使える人がいないのでとても嬉しいです!! 仕事の合間に、書いていただいたVBAを調べながら理解しようとしたのですが本日は忙しくてなかなか進みませんでした… 試してみたらお礼の方で報告しますね。
- imogasi
- ベストアンサー率27% (4737/17070)
ACCESSでは、テーブルとクエリは、等価的で、クエリのテーブル化もできる。 利用するとき、どちらでを指定しても、変える部分が無いようにしてある。それがよい点の一つでしょう。 ファイル形式のような、内容の差ではないと思うので、データの中身(来歴、時点、沿革など)をしっかりつかんで、テーブルやクエリの名前をしっかり(命名、利用)を自己管理しないとならない、(アクセスは)ソフトでしょう。 VBAでもできれば、From句などの部分を、時宜に合わせて変更できるクエリなどは組めばよいかも。 アクセス程度のソフトレベルでは(大規模のデータベース処理と違って)、アクセスは個人課題処理ユースから始まっていて、ファイル群の全体を管理する(消去も含めて)ソフトなどは考えられていないのでは。質問は個人でなく、会社のデータでしょうが、専門家に相談すべき課題と思う.顧客がらみ、金銭がらみなどのファイルが多くて、似たような名前のファイル名だと、どのファイルを使うべきか、管理ツールででも助力しないと、間違えて、えらいことになる恐れがある。 私の思い付きだが、「ファイル管理ソフト」で照会して、何を問題にしているか勉強しては。 無料のこういうコーナーに相談して、(近い)将来とも解決できる程度の問題か。 ーー 質問の課題の捉え方について、私が間違ってる場合は後免。無視してください。
お礼
回答ありがとうございます。 仰るとおり業務使用を目的として作成しておりました。 本来なら外注に出すべき案件だと私も思いますが、そう簡単に経費がでるわけでもなく… (とは言え、知識のない私がAccessを触っている間の時給と外注に出す金額を考えると、外注に出す事によって安く済む場合もあるし後々も運用できるのに…とは思います) tamu1129様の回答を受け、構造を最初から考え直してみたのですが、私の解る範囲で少し前へ進めそうな予感がしてきました。 ファイル管理ソフトは私も愛用しているものがありますが、とにかく色んな事ができますよね。 参考になるような処理があるのか、またその仕組みを参考に出来る自頭があるのか… とにかくヘルプでも見て、参考になりそうなものがないか探して見ます! ありがとうございました。
- tamu1129
- ベストアンサー率58% (1319/2258)
オプションボタンでの切り替え方法は f_a_007 さんが提示してくれているので、その部分はコメントしませんが、そもそもテーブルとクエリを切り替える意味がわかりません クエリの実態はテーブルそのものです レコーダーやプレイヤーで自分が再生したい曲順などを指定する時に、プレイリストを作成します あれと同じで、クエリは複数のテーブルから必要なデータを集めたり、1つのテーブルでもっているフィールドの1部を抽出する時などに使用する物です クエリで変更後のデータなんて言ってますが、そのクエリでデータ書き換えてしまえば、変更されるのはテーブルのデータその物が書き換わってしまうのですよ >理由は元データと変更後のデータ、別で持つとテーブル数が30以上できる為 なぜ? この部分が変です テーブルとクエリの関係が理解出来ていないのでは?
お礼
回答ありがとうございます。 仰っている通り、正しい使い方ではない事は理解しております。 力技で「選択クエリで変更後データに見せかける事」ができてしまった為、どんどんイレギュラーな使い方を良しとしてしまっていたようです… 今一度、構造を考え直してみます! ありがとうございました。
- 山田 太郎(@f_a_007)
- ベストアンサー率20% (955/4574)
添付図では、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
お礼
折角つくったので~と少し意固地になっておりましたが、tamu1129様の回答を受け、構造を最初から考え直す事にしました。 とは言え、f_a_007様に書いていただいたコードも試してみたいと思っております。 理解できるような次元ではまだない為、少しずつ調べている最中です。 BVAが書けるようになると出来ることが広がりそうですね! ありがとうございました。
お礼
この2日、ずっと読み解いていたのですが、すみません…全然読み解けませんでした。 かろうじて分かったのはこの補足として書いて頂いたコードを効率的に書いたものが、回答No.1でお答えいただいたコードだという事だけです。 「Dim M AS Integer」がMを代入させるものとし(変数?)、「M = UBound(strDatas)」が、Mに代入された値を示してる(引数?)、のような事をして処理してるのかなー?というのをなんとなく感じただけで、理解までは追いつきませんでした。 とりあえずコピペしてみて触ってみようにも、恐らく私か元々設定していたフォーム自体がうまく関連づけられてないのか現時点ではうまく動きませんでした。 お忙しいところ何度もお返事いただいて、尚且つ解りやすく説明も入れて下さったのに本当に申し訳ございません。 もう少し基本的な事を勉強してから再度チャレンジしてみようと思います! ありがとうございました。