• 締切済み

Accessで、コード実行中に、フォームのテキストボックスの値をデータソースとしたクエリーフィールドの値を取得したい

Accessにおいて、frmMENUというフォームを作成し、txtYearというテキストボックスを配置しました。"式1: [Forms]![frmMENU]![txtYear]"というフィールドを含むクエリーを作成しました。 フォームを起動し、txtYearに値を入れた後、そのクエリーを開くと、"式1"には正しく値が入っているのですが、コードの実行中(例えばボタンクリック処理の間など)にクエリを開くと何も入っていません。このとき、クエリーに対するSQL(select 式1 from クエリ1)を実行しようとすると「パラメータが少なすぎます。1を指定してください。」というエラーが発生してしまいます。コード実行中にクエリーから"式1"の値を取得することはできないのでしょうか?

みんなの回答

  • ykymtkt
  • ベストアンサー率51% (14/27)
回答No.3

補足に対してアドバイスします。 >テキストボックスの値を一旦テーブルに書き込む処理を入れ、そのテーブルを参照するクエリーを作成して対処しようかと思い始めています。 テーブルに書きこまなくてもクエリの定義を直接変更することが出来ます。 CurrentDb.QueryDefs("クエリ名称").SQL プロパティーに直接SQLを設定してみてください。

butasan
質問者

お礼

やはり予め、デザイン時にクエリ1のSQLを SELECT [Forms]![frmMENU]![txtYear] AS 式1, テーブル1.aa FROM テーブル1 と定義しておくと、実行中は式1の値を取得することができないようですね。 以下のようにコード中でテキストボックスの値を取得し、その値を直接入れるようなSQLでクエリーを定義する必要があるということですね。 CurrentDb.QueryDefs("クエリ1").SQL = "SELECT '" & [Forms]![frmMENU]![txtYear] & "' AS 式1, テーブル1.aa FROM テーブル1" 大変参考になりました。ありがとうございます。

  • ykymtkt
  • ベストアンサー率51% (14/27)
回答No.2

まず、"式1"の値を取得してどの様な処理をしたいのでしょうか。 frmMENUの中のコードで使用するなら、ME.txtYear.Text で取得できると思うのですが(式1の参照先が "txtYear" なので)。 補足して下さい。

butasan
質問者

補足

皆様からのご回答本当に感謝しております。 クエリ1とは、この質問の為に簡略化して作ったsampleでして、実際には、式1の値をクエリー上で編集を行い、他のデータも付加し、もう少し込み入ったクエリーを作成し、そのクエリーに対し、様々なSQLを発行できるようにしたかったのです。その為、あえてテキストボックスの値をクエリーから参照するように作ろうと思ったのです。 しかし、実行中は、テキストボックスの値を直にクエリーで参照することは出来ないものなのかもしれませんね。この方法は諦めて、テキストボックスの値を一旦テーブルに書き込む処理を入れ、そのテーブルを参照するクエリーを作成して対処しようかと思い始めています。

  • selenity
  • ベストアンサー率41% (324/772)
回答No.1

単純にコードの実行中(ステップ実行)には、フォーム「frmMENU」が開いていないからなのでは、、、 クエリ1のSQL文ってどうなってます?

butasan
質問者

補足

ご回答本当にありがとうございます。 クエリ1のSQL文は、 SELECT [Forms]![frmMENU]![txtYear] AS 式1, テーブル1.aa FROM テーブル1; ("テーブル1"は適当に作ったテーブルです。) コードの実行中もフォーム「frmMENU」は開いているのですが、式1には値が入っていなく、クエリ1に対するSQLを実行することができません。また、ステップ実行でなくてもSQLを実行することができませんでした・・・・。

関連するQ&A

  • Access2003 テキストボックスの値によるクエリの抽出条件

    コマンドボタンによるクエリの実行と、直接クエリを実行する(マウスでクリック) するのとで、動作が変わってしまいます。 F_メインメニュー(フォーム)内の非連結のテキストボックスtext1に文字列を入力し、 その隣に配置した検索ボタンを押すことで、テキストボックスの値を含む住所を 抽出するよう、Q_顧客を作成したのですが、F_メインメニュー内にある テキストボックスに文字列を入れ、F_メインメニューを開いたまま 直接、Q_顧客をマウスクリックにより実行すると、 確かに該当する値を含む住所をもつレコードのみがヒットします。 しかし、テキストボックスの横に配置した、コマンドボタンによる クエリの実行をすると、条件抽出されず、全件ヒットしてしまいます。 直接、Q_顧客をマウスによってクリック実行するとできるのに、 なぜコマンドボタンにコマンドボタンがクリックされたらQ_顧客を実行するよう ウィザードで作ると同じ動作にならないんでしょうか? コマンドボタンにはクリックされたらQ_顧客を実行するようにウィザードで 作成しています。 ご教授よろしくお願いします。 **以下作成状況** 「フォーム名」: F_メインメニュー ※このF_メインメニュー内に非連結のテキストボックスtext1を作成。 テキストボックスの横に検索ボタン(コマンドボタン)を作成し、 検索ボタンをクリックしたら、以下のQ_顧客を実行するよう、 コマンドボタンをウィザードで作成。 「テーブル名」: T_顧客 ※フィールドに「住所」あり。 「クエリ名」: Q_顧客 ※ ウィザードでT_顧客からクエリを作成(この時点では抽出条件設定なし) クエリの抽出条件で フィールド:住所 の抽出条件に以下を設定 Like "*" & [Forms]![F_メインメニュー]![text1].[Text] & "*"

  • ユニオンクエリの場合は「Like [Forms]![フォーム1]![テキスト0]」とはできないのでしょうか?

    こんにちは。いつもお世話になります。 早速ですが T果物、T野菜、T花の3つテーブルでユニオンクエリを作成しました。 (各テーブルのフィールド名は「名前」です。) SQL文は ************************************************ SELECT 名前.名前, * FROM [select * from T果物 UNION ALL select * from T野菜 UNION ALL select * from T花 ]. AS 名前; ************************************************ です。 次に図1の様にテキストボックスに名前を入力してコマンドボタンを押してクエリを開く為のユーザーフォームを作成しました。 コマンド2を押したときは Private Sub コマンド2_Click() DoCmd.OpenQuery ("ユニオンクエリ") End Sub でユニオンクエリを開く動作を指示してあります。 ここまでなら問題なく作業ができるのですが テキストボックスに入力されている名前を含むものがコマンドボタンを押すと表示されるようにしたいのですが どうもユニオンクエリだとうまくいきません。 ユニオンクエリはデザインビューなら図2、 SQL文なら ************************************************ SELECT 名前.名前, * FROM [select * from T果物 UNION ALL select * from T野菜 UNION ALL select * from T花 ]. AS 名前 WHERE (((名前.名前) Like [Forms]![フォーム1]![テキスト0])); ************************************************ とすると、図3のようなエラーが出てしまいます。 ユニオンクエリではなく、普通のクエリ(選択クエリ?)なら 「Like [Forms]![フォーム1]![テキスト0]」の一文を入れても 問題なく作業できます。 何かアドバイスお願い致します。

  • Access2000でVBAからパラメータクエリを実行

    Access2000でフォームからの値を参照して実行するクエリを作りました。 SQLで表すと、以下のようなものです。 クエリ名:test SELECT TEST.HAKKODTE FROM TEST WHERE (((TEST.HAKKODTE)=Format([Forms]![F_メニュー]![txtNyukinDate],"yyyymmdd"))); このクエリをダブルクリックで実行すると問題なく実行できます。 これを、VBAからレコードを参照したいと思い、 以下のように記述しました。 Dim cn As ADODB.Connection Set cn = CurrentProject.Connection Dim rs1 As ADODB.Recordset Set rs1 = New ADODB.Recordset Dim sqlstr As String sqlstr = "SELECT * FROM test;" rs1.Open sqlstr, cn, adOpenKeyset, adLockOptimistic しかし、Open処理で、「1つ以上の必要なパラメータの値が設定されていません」 というエラーになってしまいます。 VBAを実行するときに、[Forms]![F_メニュー]![txtNyukinDate]に きちんと値は入力されています。 これを実行する方法はあるでしょうか?

  • フォームで入力された文字をクエリのフィールド名として反映させたい 【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に関しては初心者ですので、極力専門用語は少なくご教授いただければと思います。よろしくお願いします。

  • access クエリコンボボックスについて

    フォームのメニュー画面でレポート印刷ボタンを作りました。 印刷ボタンを押すと[抽出する都道府県は?] とパラメーター入力が表示されるようにしてあるのですが、 それを入力式ではなく、コンボボックスにして選択式にしたいのですが、 どのようにすれば良いのでしょうか? コンボボックスにマクロをつけて クエリの抽出条件のところに[forms]![フォーム名]![コンボ名] を入力しても、実行したときになにも抽出されません。 なにがどのように違っているのでしょうか? 説明が分かりにくくて申し訳ないのですが、 わかる方いらっしゃいましたらぜひ教えていただきたいです。 よろしくお願いいたします。

  • ACCESSで空のフォームにクエリの値を追加する方法

    ACCESSで空のフォームにクエリの値を追加する方法 ACCESS2007を使っています。 フォームで空のフォームから始めた時やウィザードでテーブルやクエリを 対象とした場合でも、別のクエリの値を表示させたいのですが可能でしょうか? 可能であれば、 クエリに対してさらにクエリを与えて1フィールドになるようにし それを配置できるといいのですが。 例えば、クエリの結果: (ID)、(名前)、(売上)  1   田中   100  2   佐藤    50  3   山田   220 というのがあったとして、「100」「50」「220」というのを各各1つのテキストボックス のようなものにできるといいと思っています。(IDをそれぞれに固定で指定します。) できなければ、サブフォームのようなものでもいいのですが、 フォームの作成時ではなく、後から追加する方法があれば知りたいです。 よろしくお願い致します。

  • Accessのクエリの検索条件にフォームのテキストボックスを指定したんですが…

    WinXPのAccess2002です。 クエリの検索条件には、[]カッコを用いてフォーム上のテキストボックスを指定できますが、 Nullじゃないものを検索しようと、is not nullと 入力して、試験的にクエリを起動させたところ、 「式が複雑なので…」というメッセージが帰ってきました。 ですが、そのテキストボックスに値を直接指定(数字を入力 するフィールドなんですが、039とか555とか)すると、エラーも 起きずにクエリは実行してくれます。 "is not null"などの場合は、特別な指定の仕方があるのでしょうか。 どうぞご教示のほどよろしくお願いします。

  • Access2003 削除クエリで式1フィールドがドンドン作成される

    Access2003で削除クエリを作成しました。 抽出条件に「Aフォーム」内のトグルボタン「チーム1」(オプショングループ名=商品区分)をクリックした時に、[商品番号]が100より小さいものを、トグルボタン「チーム2」をクリックした時には、[商品番号]が100以上のものを抽出するよう入力しました。 【クエリデザインビューの状態↓】 フィールド  | [商品番号] | AA: [forms]![Aフォーム]![商品区分] 抽出条件 | < 100   | 1 または  | >= 100  | 2 一応上記で削除クエリは思うように実行できたのですが、このクエリを閉じてまた開くとフィールドAAと同じ内容で『式1:』フィールドが作成されてしまいます。また閉じて開くと、同じ内容で『式2:』が、次は『式3:』が…とドンドンと作成されてしまいます。 Access2003以外のAccessでは「式」フィールドは増えなかったです。 この『式~:』フィールドが勝手に作成されないようにするには、どうすればいいのでしょうか?もしくは、最初の削除クエリの作り方がおかしいのでしょうか? 教えて頂きたく、よろしくお願いします。

  • 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")) と入力しましたところ、、、、「式が複雑すぎるか、、、」のエラーメッセージが出てしまいました。 どなたか助けてください。お願い致します。

  • Access2003でコンボボックスからデータを抽出したい

    自己啓発でAccess2003を勉強しています。 Access2003でコンボボックスで名前を選択して、データ(住所)を抽出したものをリストボックスに表示させたいのですがどこがまちがっているかわかりません。こんなことで3週間ぐらい悩んでいます。 回答またはアドバイスをお願いします。 もしくはもっと簡単なやりかたがあればお願いします。 (1)「氏名」、「住所」のテーブルを作成。テーブル名は「01データ」 (2)「氏名」、「住所」のクエリを作成。クエリ名は「クエリ1」 (3)フォームでコンボボックスとリストを作成。フォーム名は「印刷」 ⇒コンボボックスの名前は「検索」。 ⇒値集合ソースはSELECT [01データ].ID, [01データ].氏名 FROM 01データ; これで「氏名」が選択できた。 (4)クエリの「氏名」抽出条件にLike [forms]![印刷]![検索] (5)検索するマクロを作成。マクロ名「M検索」 アクションは 全レコードの表示 フィルタの実行 ⇒Where条件は[Forms]![印刷]![検索]=[クエリ1]![氏名] (6)マクロ「M検索」をコンボボックスのプロパティ「イベント」タブから変更時に設定する。 (7)フォーム「印刷」を開き、コンボボックスで氏名を選択すると『クエリ1!氏名』と表示されてしまいます。 (8)フォーム「印刷」のリストボックスは全レコードが表示されている。

専門家に質問してみよう