![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
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に関しては初心者ですので、極力専門用語は少なくご教授いただければと思います。よろしくお願いします。
![「フォームで入力された文字をクエリのフィー」の質問画像](http://oshiete.xgoo.jp/_/bucket/oshietegoo/images/media/4/629561_5497c0bb1027d/M.jpg)
A 回答 (3件)
- 最新から表示
- 回答順に表示
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」すると、設定/解除できます。
また、内容の確認は、「ローカルウィンドウ」「ウォッチウィンドウ」などで確認できます。
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
回答ありがとうございます。ただ、申し訳ありませんがいまだ解決しません。
上記「質問」の「画像」の部分にあるようなクエリ"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」と表示され、すべての結果に先ほどの「パラメータの入力」ダイアログで入力したものが出力されると言った具合です。
色々と自分なりに勉強してみましたが、よくわからないのでもう少し御教授願えたらうれしいと思います。よろしくお願いします。
No.1
- 回答日時:
早速の回答ありがとうございます。
ただ、参考としていただいたURLの質問は
「フォームのコンボボックスで選択されたテキストと同じ名称のフィールドに「○」が入力されているデータを検索したい」
ですが、私の場合は
「フォームのテキストボックスで入力されたテキストと同じ名称のフィールドを既存のテーブルより抽出し、クエリ内のフィールド名として採用する」
です。コンボボックスとテキストボックスの違いはさしたる問題ではないと思いますが、私の場合は抽出条件の指定まではしておりません。また、クエリにはテキストボックスで指定して追加するフィールドの他にも、フィールドとそのフィールドからの抽出条件が指定してあります(こちらはフォームからの変更操作は加えません)。
「似たようなもんだ」ということでも、もう少し突っ込んで教えていただけないでしょうか?(具体的にはフォームにおけるSQL作成コードと追加箇所、クエリへの追加コードと追加箇所など)
申し訳ありませんがよろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
あるあるbotに投稿したけど採用されなかったあるある募集
あるあるbotに投稿したけど採用されなかったあるあるをこちらに投稿してください
-
Access レポート印刷するときに1ページに収める方法
Access(アクセス)
-
ACCESSでフィールド名の変更(VBA)
Access(アクセス)
-
Accessでフィールド名を変数(文字列)で・・・
Access(アクセス)
-
-
4
Accessクエリ 複数フィールドを対象に空白の場合は全件表示したい
Access(アクセス)
-
5
アクセスで入力したデータの順番が変わってしまいます
その他(ビジネス・キャリア)
-
6
クエリのデータをテーブルに入れたい
Access(アクセス)
-
7
テキストボックスにクエリ結果を表示させたい
その他(データベース)
-
8
Access サブフォームでの選択行の取得
その他(データベース)
-
9
ACCESSで空白のデーターをクエリで判定/識別する方法を教えてくださ
Access(アクセス)
-
10
Accessの数値から時間に変換する時点で困っています。
その他(データベース)
-
11
フォームの値をクエリーに反映したい
その他(Microsoft Office)
-
12
ACCESSの時間帯の抽出について
その他(Microsoft Office)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
アクセスで追加した項目に全て...
-
Accessで、1つの項目に複数の...
-
Accessのテーブルのフィールド...
-
テキストボックスにクエリ結果...
-
テーブルでメモ型になっている...
-
Accessを開きなおすとテキスト...
-
Access:値が求めたい値の2倍...
-
「[Microsoft][ODBC SQL Server...
-
Accessで、テーブルに入力した...
-
アクセス クエリのフィールド...
-
Accessの電話番号フィールド
-
Access で 特定の文字の個数を...
-
アクセスのクエリに「PHONETIC...
-
クエリの一つのフィールドのIIF...
-
AccessのDLookUpの第3引数の値...
-
途中で改行されたCSVをAccessに...
-
Access2002 フォーム上にない...
-
access フォームを開くと「パ...
-
【急】Access 4桁の数字の頭...
-
Access計算式のフィールドの指...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
アクセスで追加した項目に全て...
-
Accessで、1つの項目に複数の...
-
Accessのテーブルのフィールド...
-
テキストボックスにクエリ結果...
-
テーブルでメモ型になっている...
-
Accessを開きなおすとテキスト...
-
Accessで、テーブルに入力した...
-
Access で 特定の文字の個数を...
-
Accessのクエリでハイパーリン...
-
access フォームを開くと「パ...
-
Access:値が求めたい値の2倍...
-
accessでの文字列の混ざった連...
-
途中で改行されたCSVをAccessに...
-
アクセスのクエリ 1文字以上を...
-
Accessの電話番号フィールド
-
アクセスのクエリに「PHONETIC...
-
【急】Access 4桁の数字の頭...
-
ACCESSで2つフィールドの日付...
-
アクセス クエリのフィールド...
-
追加クエリで特定フィールドの...
おすすめ情報