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に関しては初心者ですので、極力専門用語は少なくご教授いただければと思います。よろしくお願いします。
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で質問しましょう!
似たような質問が見つかりました
- その他(データベース) 更新クエリをリンクデータベーステーブルに実行し実行時エラー3362固有インデックスに重複する値が含ま 1 2022/09/21 11:44
- Access(アクセス) アクセスの更新クエリでカレントレコードのみ更新したい 1 2022/06/02 23:32
- Access(アクセス) Accessのクエリの結果を、既存のエクセルに追加したい 2 2022/07/31 22:44
- その他(データベース) Accessフォームからパラメーターで表示したレコードを指定のExcelのセルへ転送する方法について 2 2022/08/22 18:04
- Access(アクセス) Accessクエリで年月フィールドを年のみで抽出する方法について 2 2022/08/29 18:10
- Access(アクセス) テキストボックスの値をテーブルに入力したい 2 2022/06/28 12:08
- Access(アクセス) AccessVBAで降順にするテーブル作成クエリを使用して作成したテーブルを削除し同一のテーブル作成 1 2023/01/06 11:17
- Access(アクセス) Dlookupにエラーがでてしまう 1 2022/10/31 14:35
- Access(アクセス) Accessテーブルの結合で別々のテーブルのフィールドを組み合わせて値を出す方法について 2 2022/07/20 19:43
- Access(アクセス) Access 登録ボタンからサブフォームの更新 1 2022/07/22 10:23
このQ&Aを見た人はこんなQ&Aも見ています
-
「どうして捨てられないの?」前妻の物を捨てられない男性の心理って?
前妻の物を捨てられない理由に加え、捨てるための手段はあるのかを専門家に聞いてみた!
-
テキストボックスにクエリ結果を表示させたい
その他(データベース)
-
アクセスでテキストボックスの値が空白だったら
Access(アクセス)
-
ACCESSで空白のデーターをクエリで判定/識別する方法を教えてくださ
Access(アクセス)
-
-
4
Access レポート印刷するときに1ページに収める方法
Access(アクセス)
-
5
Accessでフィールド名を変数(文字列)で・・・
Access(アクセス)
-
6
ACCESSでフィールド名の変更(VBA)
Access(アクセス)
-
7
ACCESS2010のVBAでフォーム内クエリのフィールド値を取得したい
Visual Basic(VBA)
-
8
アクセスで前年対比を出す方法を教えてください。
Access(アクセス)
-
9
ACCESSでVBAから選択クエリの抽出条件を指定したい
Access(アクセス)
-
10
Accessで文字列の長さによって、フィールドの幅を自動で合わせる方法
Excel(エクセル)
-
11
選択クエリで実行結果を非表示にできますか?
その他(データベース)
-
12
アクセスで入力したデータの順番が変わってしまいます
その他(ビジネス・キャリア)
-
13
Access サブフォームでの選択行の取得
その他(データベース)
-
14
アクセスで数値型のフィールドにNullをいれたい
その他(データベース)
-
15
Access フォーム上でのテキストボックスとテーブルの連結
Access(アクセス)
-
16
Accessでテーブルの値をテキストボックスに代入するには?
Access(アクセス)
-
17
アクセスのフォームのビューが表示されないのですが、
その他(データベース)
-
18
ACCESSの時間帯の抽出について
その他(Microsoft Office)
-
19
フォームの値をクエリーに反映したい
その他(Microsoft Office)
-
20
ACCESSユニオンクエリから新テーブルを
Access(アクセス)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
アクセスで追加した項目に全て...
-
Accessを開きなおすとテキスト...
-
Accessで、1つの項目に複数の...
-
テーブルでメモ型になっている...
-
テキストボックスにクエリ結果...
-
access フォームを開くと「パ...
-
Accessのテーブルのフィールド...
-
Access2013 レポートで一定行数...
-
Accessで、テーブルに入力した...
-
Access で 特定の文字の個数を...
-
SQLステートメントのFROM句・・・
-
accessvba 複数条件でFilterを...
-
ACCESSで2つフィールドの日付...
-
アクセスのクエリ 1文字以上を...
-
ACCESSからEXCELへのエクスポート
-
フォームで入力された文字をク...
-
Access:値が求めたい値の2倍...
-
クエリの一つのフィールドのIIF...
-
Accessのクエリでハイパーリン...
-
追加クエリでテーブル全体を指...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessで、1つの項目に複数の...
-
アクセスで追加した項目に全て...
-
Accessのテーブルのフィールド...
-
テキストボックスにクエリ結果...
-
Accessを開きなおすとテキスト...
-
テーブルでメモ型になっている...
-
Access:値が求めたい値の2倍...
-
Accessで、テーブルに入力した...
-
Access で 特定の文字の個数を...
-
Accessのクエリでハイパーリン...
-
ACCESSで2つフィールドの日付...
-
アクセスのクエリ 1文字以上を...
-
追加クエリで特定フィールドの...
-
accessでの文字列の混ざった連...
-
途中で改行されたCSVをAccessに...
-
更新クエリをリンクデータベー...
-
Access2002の重複クエリで大文...
-
Accessの電話番号フィールド
-
accessvba 複数条件でFilterを...
-
access フォームを開くと「パ...
おすすめ情報