• 締切済み

フォームで入力された文字をクエリのフィールド名として反映させたい 【Microsoft Access】

Microsoft Accessに関する質問です。バージョンは2003です。 フォーム"Fo1"に、テキストボックス"Te1"とクエリの実行を行うためのコマンドボタン"CB1"があるとします。コマンドボタン"CB1"を押すことでクエリ"Q1"が実行されるよう、イベント プロシージャに記載しています。クエリ"Q1"にはテーブル"Ta1"が表示されており、テーブル"Ta1"は複数のフィールド("Fi1","Fi2","Fi3",…)を有するものとします。 このような状況において、テキストボックス"Te1"に複数のフィールド("Fi1","Fi2","Fi3",…)のうちのどれかを記述し、コマンドボタン"CB1"を押したときに、テキストボックス"Te1"に記載されたフィールド名のデータを実行結果として出力したいと考えています。 そこで、クエリ"Q1"の「フィールド:」の部分に [Forms]![Fo1]![Te1] と記入し、「テーブル:」の部分に"Ta1"を指定した後、クエリを保存して(このときにはフィールド名の記入した部分は「式1: [Ta1].Forms![Fo1]![Te1]」と表示されています)閉じた後に、フォーム"Fo1"を開き、テキストボックス"Te1"に出力させたいフィールド名を記載しコマンドボタン"CB1"を押してみました。 すると、「パラメータの入力」というダイアログが立ち上がり、ダイアログ内には「Ta1.Forms!F01!Te1」という記述とテキストボックスが出力されました。テキストボックスに無記入で"OK"ボタンを押したところ、出力結果に「式1」という列が現れ全てのセルが空白となってしまいました。 フォームや、クエリに記入する表記が間違っているのか、そもそも出力させるフィールド名をフォームから指定するという方法が根本的に違うのかわかりません。 申し訳ありませんが、当方Accessに関しては初心者ですので、極力専門用語は少なくご教授いただければと思います。よろしくお願いします。

みんなの回答

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

> SELECT [XXXX] AS 式1 > FROM [Te1]; この部分を、SELECT XXXX FROM Te1; として、SQLBASE に作っておきます。 > クエリの実行結果はフィールド名のところに「式1」と表示され SQLビューで見たとき、 YYYY AS AAA となっている場合、クエリを実行すると フィールド名 AAA で、YYYY の内容が表示されます。 >「パラメータの入力」というダイアログが立ち上がり「XXXX」に何を入力するか これは、sSql = Replace(SQLBASE, "XXXX", sTmp) が処理されていない、と思ってもいいと思います。 (なぜ、そうなるのかは分からないのですが) 今回やろうとしているのは、 (1) sSql = "SELECT " & Me.Te1 & " FROM Ta1 WHERE ・・・;" ではなく、 SQLBASE = "SELECT XXXX FROM Ta1 WHERE ・・・;" の XXXX をテキストボックスで指定された文字列(Me.Te1)に置き換えようとするものです。 ((1) で作るよりは、Replace で置き換えたほうが何をやっているかイメージしやすいと思ったから) >    CurrentDb.QueryDefs("Q1").SQL = sSql この行にブレイクポイントを設定し、sSql の内容を確かめられますか? ブレイクポイントは、その行をクリックし「F9」すると、設定/解除できます。 また、内容の確認は、「ローカルウィンドウ」「ウォッチウィンドウ」などで確認できます。

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

私がよく使う方法ですが、 クエリのデザインで基本的なものを作成し、SQLビュー表示の内容を持ってきます。 その際、置き換えるところを XXXX のように、指定しやすい文字列に変更しておきます。 (Sample1内の SQLBASE 宣言部分) Private Sub Sample1()   Dim sTmp As String   Dim sSql As String   Const SQLBASE = "SELECT XXXX FROM Ta1 WHERE ・・・・;"   sTmp = Trim(Nz(Me.Te1, ""))   If (Len(sTmp) > 0) Then     sSql = Replace(SQLBASE, "XXXX", sTmp) '    クエリを作るなら、 '    CurrentDb.CreateQueryDef "クエリ名", sSql '    既にあるクエリの内容を書き換えるのであれば、 '    CurrentDb.QueryDefs("Q1").SQL = sSql '    フォームのレコードソースを書き換えるのであれば '    Me.RecordSource = sSql '    その後、フォーム上の txt00 に連結するのであれば '    Me.txt00.ControlSource = sTmp '    個数求めるなら '    iCount = DCount(sTmp, "Ta1", 抽出条件) '    などなど   End If End Sub

dadapyon
質問者

お礼

回答ありがとうございます。ただ、申し訳ありませんがいまだ解決しません。 上記「質問」の「画像」の部分にあるようなクエリ"Q1"を作り、フィールド名の欄に「XXXX」と入力し、SQLパススルークエリを参照すると SELECT [XXXX] AS 式1 FROM [Te1]; と出力されました。([]が付いているのが気になりますが…)これを30246kikuさんのソースの中の Const SQLBASE = "SELECT XXXX FROM Ta1 WHERE ・・・・;" のダブルクオーテーションマークの間に貼りつけ(変更)ました。その後、 30246kikuさんのソースの中の「Private Sub Sample1()」の部分から「End Sub」の部分をフォーム"Fo1"のソース内にコピーしました。また、「既にあるクエリの内容を書き換える」ので、 '    CurrentDb.QueryDefs("Q1").SQL = sSql の行の'を消去ました。 テーブル"Ta1"内に存在するフィールド名をテキストボックス"Te1"に入力し、フォームのコントロールボックス"CB1"を押しました。 すると、「パラメータの入力」というダイアログが立ち上がり「XXXX」に何を入力するか教えてくれと訴えられました。そこに何かを打ち込むと出力されたクエリの実行結果はフィールド名のところに「式1」と表示され、すべての結果に先ほどの「パラメータの入力」ダイアログで入力したものが出力されると言った具合です。 色々と自分なりに勉強してみましたが、よくわからないのでもう少し御教授願えたらうれしいと思います。よろしくお願いします。

  • 30246kiku
  • ベストアンサー率73% (370/504)
回答No.1
dadapyon
質問者

お礼

早速の回答ありがとうございます。 ただ、参考としていただいたURLの質問は 「フォームのコンボボックスで選択されたテキストと同じ名称のフィールドに「○」が入力されているデータを検索したい」 ですが、私の場合は 「フォームのテキストボックスで入力されたテキストと同じ名称のフィールドを既存のテーブルより抽出し、クエリ内のフィールド名として採用する」 です。コンボボックスとテキストボックスの違いはさしたる問題ではないと思いますが、私の場合は抽出条件の指定まではしておりません。また、クエリにはテキストボックスで指定して追加するフィールドの他にも、フィールドとそのフィールドからの抽出条件が指定してあります(こちらはフォームからの変更操作は加えません)。 「似たようなもんだ」ということでも、もう少し突っ込んで教えていただけないでしょうか?(具体的にはフォームにおけるSQL作成コードと追加箇所、クエリへの追加コードと追加箇所など) 申し訳ありませんがよろしくお願いします。

関連するQ&A

  • Accessのクエリ

    初めまして。Accessのクエリについての質問です。 Access2003を使っています。 検索フォームを作り、その検索フォームにテキストボックスを2つ作り、そのテキストボックスに検索したい言葉を入力し、コマンドボタンで作った検索ボタンを押すとマクロでフィルタの実行がされデータを抽出できるというものを作りました。フィルタには選択クエリを使用しています。抽出したい2つのフィールドの抽出条件にあいまい条件のLike "*" & [Forms]![フォーム名]![テキストボックス名] & "*"を入れています。 今はテキストボックスが2つですが、もっと増やしていろんな条件で検索出来るようにしたいので、3つ目のテキストボックスを作り、抽出条件も同じように入れました。ですが、そうすると今までちゃんとできていた最初の2つのテキストボックスによる抽出が違った結果となりでてきました。このとき、新しく作った3つ目のテキストボックスは空欄なので最初と同じ結果が出ると思ったのですが、これは抽出条件が3つはできないということでしょうか?どなたか教えてください。

  • Access クエリについて

    初めまして。Accessのクエリについての質問です。 Access2003です。 検索フォームを作り、その検索フォームにテキストボックスを2つ作り、そのテキストボックスに検索したい言葉を入力し、コマンドボタンで作った検索ボタンを押すとマクロでフィルタの実行がされデータを抽出できるというものを作りました。フィルタには選択クエリを使用しています。抽出したい2つのフィールドの抽出条件に[forms]![フォーム名]![テキストボックス名]を入れています。 今は2つのテキストボックス両方に言葉を入力するとデータが抽出されますが、これを1つのテキストボックスだけ入力でもデータが抽出されるようにしたいのですが可能ですか?今は一つのテキストボックスに言葉を入力しもう一つを空欄にすると何もデータが出てこない状態です。 2つのテキストボックスをテキスト(1)とテキスト(2)とすると 以下のようにデータを抽出したいです。 ・テキスト(1)とテキスト(2)に入力 →両方の言葉が一致したデータ ・テキスト(1)だけに入力  →テキスト(1)の言葉だけ一致したデータ ・テキスト(2)だけに入力  →テキスト(2)の言葉だけ一致したデータ 初歩的な質問でしたら申し訳ないです。どうかお願いします。

  • ACCESS2003でクエリを使った検索フォームを作っています。

    ACCESS2003でクエリを使った検索フォームを作っています。 クエリは以下の様になっています。 ----------  番号   タイプ   品名  1111   AA     商品1  2222   AA     しょうひん2  3333   BB     商品しょうひん3 ---------- 品名のフィールドの抽出条件に ---------- Like "*" & [Forms]![品名検索フォーム]![品名検索] & "*" ---------- と入れています。 品名検索フォームは帳票タイプで、フォームヘッダーにテキストボックスを設け 「品名検索」と名前をつけています。 テキストボックスに【商品】と入力すれば番号1111と3333が、【しょうひん】と入力すれば 番号2222と3333が抽出されるように設定し、ここはうまく動きました。 ただ、このフォームを開いた際、テキストボックスは空欄になっているため、全レコードが 表示されてしまいます。テキストボックスが空欄の際は、何も表示したくないのですが どこを触ればいいのでしょうか? どうかよろしくお願いいたします。

  • ACCESS フォームで入力した日付をクエリで読み

    ACCESS フォームで入力した日付をクエリで読み替えたい ACCESS フォームで入力した日付をクエリで使用しているテーブルの書式に変換したい フォーム テキスト名:日付にyyyymmdd で入力します クエリ テキスト名:日付はパラメータとして使用しています クエリ内で使用しているテーブルの日付書式は 日付:yyyy/mm/ddです パラメータは 「日付始」と「日付終」の2箇所のテキストに入力されたデータを使用しています。以下がパラメータです。 Between [Forms]![フォーム]![日付始] and [Forms]![フォーム]![日付終] フォームのテキストボックスにyyyymmddと入力してもクエリでエラーが出ることない パラメータを日付に設定したいのですがどうしたらよいでしょうか? ちなみに、以下の式を入れたらエラーです。 Between CDate(Format([Forms]![フォーム]![日付始],"yyyy/mm/dd")) and CDate(Format([Forms]![フォーム]![日付始],"yyyy/mm/dd")) と入力しましたところ、、、、「式が複雑すぎるか、、、」のエラーメッセージが出てしまいました。 どなたか助けてください。お願い致します。

  • ACCESSでフォーム入力→レポート出力したい

    ACCESSでフォーム入力→レポート出力したい OS:XP,ACCESS2000 フォームのテキストボックスに入力した文字をレポートのテキストボックスに表示したい。 フォーム: ファイル名は「フォーム1」で、その中に作ったテキストボックス名は「入力データ」 コマンドボタン名は「レポート出力」 レポート: ファイル名は「レポート1」で、その中に作ったテキストボックス名は「出力データ」 フォーム1とレポート1を立ち上げてフォームのテキストボックスにデータを入力した後、 コマンドボタンを押してもレポート1のテキストボックスに入力したデータが表示されません。 レポート1を選択した後にデザインボタンを押し、その後にもう一度立ち上げると、 なぜかデータが書き込まれています。 コマンドボタンを押したのと同時にレポート1にデータが表示されるようにするには どうすれば良いですか? プログラムは以下の様になっております。 (1)クラスオブジェクト下 Private Sub コマンドボタン_Click() Call レポート書き出し() End Sub (2)標準モジュール下 Public Function レポート書き出し() Dim F As Form Dim R As Report Set F = Forms![フォーム1] Set R = Reports![レポート1] R![出力データ] = F![入力データ] End Function

  • フォームからクエリの抽出条件を入力する方法

    既存のデータベースより複数のテーブルを結合し、必要なカラムだけを表示させるようなクエリを作成しました。 他の人でも操作ができるように、フォームを作成し、テキストボックスにて抽出条件を指定し、クエリやレポートを出力するような形にしたいと思っています。 このクエリの抽出条件をフォームより指定する方法で悩んでいます。 現在、作成したクエリの抽出条件の中に [Forms]![フォーム名]![テキストボックス名] と入力し、フォームのテキストボックスで抽出条件を記入してクエリを実行させているのですが、これでは複雑な条件 (Between~ や 条件1 or 条件2 等の指定) を入れると「直前の操作はキャンセルされました」とポップアップが出てしまい、思うとおりにうごきません。 フォーム内でこのような抽出条件範囲の指定ができるようにするにはどうしたらよろしいでしょうか? よろしくおねがいします。

  • 50個分のクエリとフォームを作らないといけないのか!?

    50個分のクエリとフォームを作らないといけないのか!? 素人が見よう見まねで作っていますので、分かり難いかと思いますが、 何卒よろしくお願い致します。 現在、フォーム(検索)があり、そこに非連結コンボボックス(テキスト1)が あります。このコンボボックスは、テーブル(取引先)の値(会社名)を参照して います。会社名は約200あります。 テーブル(取引先)のフィールドは会社名、フリガナ、五十音別です。 今迄は、マウス操作で会社名を選んでいました。今度、タッチパネルLCDを 使う事になったのですが、コンボボックスでは、文字は大きく出来ても、 コンボボックスの枠やスクロールバーの幅を大きく出来ず、うまくタッチ パネルでの操作ができません。 そこで、新たにフォーム(五十音)を作り、五十音分(あ~ん)のコマンドボタン を作り、コマンドボタン”あ”を押すとクエリ”あ”で、テーブル(取引先)の 五十音別が”あ”の会社だけ抽出させ、結果をフォーム(あ)に表形式で表示 させました。 さらに、マクロ(値の代入)で、フォーム(検索)のコンボボックス改めテキスト ボックス(テキスト1)に会社名を代入させました。 回りくどい事だと思いますが、これで、マウスで選ぶのと同じ事が出来ました。 しかし、この方法だと、クエリとクエリの結果を表示させるフォームが、それ ぞれ50づつ必要になってしまいます。 50づつ作ってもいいのですが、きっと他にもっと簡単で明解な方法があると 思うのですが、素人ゆえ、全く見当がつきません。 簡単な方法がありましたら、ご教授のほど宜しくお願い致します。 なお、わがままを言って申し訳ありませんが、コンボボックスの枠を大きくした りではなく、コマンドボタンを使う方法でお願い致します。

  • フォームの値をクエリーに反映したい

    ども。usiushiです。 アクセスのフォームに日付を入れる非連結のテキストボックスを作り、 その日付をクエリーに反映させようとしているのですが、表示が「・・・・」としかでません。 反映させるやり方をご存知の方、ぜひ教えてください。よろしくお願い致します。 現在やっていること F_hidukeの中に「日付」というテキストボックスを作り、西暦を入力しています。 (例) 2010/12/28 Q_itiran というクエリーの中に 日付:[Forms]![F_itiran]![日付] を入力していますが、反映しない状態です。

  • ACCESSでフォームを作ってるのですが

    宜しくお願いします。 ACCESSのフォームでクエリのフィールドを テキストボックスに表示させたいのですが、 テキストボックスのプロパティのどこを いじればよいのでしょうか? 教えてください。

  • フィールド名の変更について(ACCESS)

    テーブルのフィールド名をクエリー等で変更したいのですが、(最終的にはフォームでコマンドボタン化したいのですが)ご存知の方がいらっしゃいましたら教えてください。

専門家に質問してみよう