
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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
Accessでフィールド名を変数(文字列)で・・・
Access(アクセス)
-
フォームの値をクエリーに反映したい
その他(Microsoft Office)
-
accessでクエリをExcelにエクスポートする時にファイル名に日付を追加したい
Access(アクセス)
-
-
4
ACCESSでフィールド名の変更(VBA)
Access(アクセス)
-
5
Accessの関数で、フィールド名に入力する"と[ ]の違い
その他(データベース)
-
6
IIF関数の使い方
Visual Basic(VBA)
-
7
AccessからExcelにエクスポートする時に常に上書きしたい
Excel(エクセル)
-
8
【Access】テーブルをエクスポートする際、ファイル名末尾に日付をつけたい!
Windows 10
-
9
Access コンボボックスの値をクリアしたい。
PowerPoint(パワーポイント)
-
10
ACCESSでクエリを作成したら「式が複雑すぎます。」の表記が…
その他(データベース)
-
11
access テキストボックスの値取得
Access(アクセス)
-
12
アクセス 同じフィールド(テキスト型)のレコードを連結させたい
Access(アクセス)
-
13
ACCESSでの文字と数字の結合について
Access(アクセス)
-
14
Accessでテーブルの値をテキストボックスに代入するには?
Access(アクセス)
-
15
アクセスVBA フォームのスクロールバーを動かす。
Visual Basic(VBA)
-
16
Accessを使って日付を比較したい
その他(Microsoft Office)
-
17
アクセス フィールド名に変数を付け加えて参照する
その他(データベース)
-
18
Access レポート印刷するときに1ページに収める方法
Access(アクセス)
-
19
accessデータを指定したExcel、そして指定したセルへエクスポートするaccess VBAコー
Access(アクセス)
-
20
Accessのスプレッドシートエクスポートで、シートが追加されてしまう
Access(アクセス)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
アクセスで追加した項目に全て...
-
Accessを開きなおすとテキスト...
-
アクセスのクエリ 1文字以上を...
-
アクセスのマッチングで空白が...
-
アクセス クエリのフィールド...
-
テキストボックスにクエリ結果...
-
Accessのテーブルのフィールド...
-
AccessのテーブルにVBAでフィー...
-
Access2007のテーブルにハイパ...
-
AccessのDLookUpの第3引数の値...
-
フィールド名の変更について(...
-
追加クエリで特定フィールドの...
-
Accessのクエリでハイパーリン...
-
Accessで、1つの項目に複数の...
-
日付型のフィールドに空白を入...
-
差込印刷での全角表示について...
-
SQL文で パラメータが少なすぎ...
-
Excleピボットでデータのない部...
-
Accessの桁区切りについ...
-
アクセスのエラー「クエリには...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessで、1つの項目に複数の...
-
アクセスで追加した項目に全て...
-
Accessのテーブルのフィールド...
-
テキストボックスにクエリ結果...
-
Accessを開きなおすとテキスト...
-
テーブルでメモ型になっている...
-
アクセスのクエリ 1文字以上を...
-
Accessで、テーブルに入力した...
-
アクセス クエリのフィールド...
-
Access:値が求めたい値の2倍...
-
access フォームを開くと「パ...
-
Access で 特定の文字の個数を...
-
追加クエリで特定フィールドの...
-
ACCESSで2つフィールドの日付...
-
accessvba 複数条件でFilterを...
-
Access 選択クエリで「テーブ...
-
アクセスのクエリに「PHONETIC...
-
「[Microsoft][ODBC SQL Server...
-
途中で改行されたCSVをAccessに...
-
Accessの電話番号フィールド
おすすめ情報