Microsoft Access 掲示板

パラメータクエリ

8 コメント
views
4 フォロー

お世話になっております。

あるフォーム[F_入力]と、そのフォームのコントロールの値をパラメータにしたクエリ[Q_抽出]があります。
このクエリで抽出したデータをエクセルに出力するために、レコードセットに入れたいのですがうまくいきません。

Dim qd as DAO.QueryDef
Dim rs as DAO.Recordset

set qd = currentDb.QueryDefs("Q_抽出")
qd.Parametes("とっても長い")=とっても長い
Set rs=qd.openrecordset
...

とっても長いのところが、参照するコントロールが多くて長くなってます。
長いからなのか、エラーが出てしまいます。

Q_抽出のデータを、いったんテーブルにしてから、レコードセットとして取り込む方法も考えましたが、よくわかりませんでした。

初歩的な質問、かつ情報不足とは思いますが、ヒントをいただければと思います。

nokonoko
作成: 2023/07/19 (水) 15:36:47
通報 ...
1
りんご 2023/07/19 (水) 15:52:39 935bc@0e907

1番オーソドックスな解決法
T‘sWare Access Tips#586
最終手段、「クエリ パラメータ」ダイアログボックスを開いて設定した上で、同じコード(パラメータを指定する)を再試行。
T‘sWare Access Tips#542
もし上記リンク失敗の際は、ググって下さい。

2
りんご 2023/07/19 (水) 15:59:54 935bc@0e907

>とっても長いのところが、参照するコントロールが多くて長くなってます。
もし複数のパラメータを1句に詰め込んでいるのであれば、とりあえず複数行に分けましょう。

3
nokonoko 2023/07/19 (水) 16:26:33 3e2e6@54883 >> 2

回答ありがとうございました。

テキストボックスtxt01からtxt20まであって、
製品コードがそのどれかに当てはまるものを抽出しています。
おかげで(というか、初歩的なので)
[Forms]![F_入力]![txt01] Or [Forms]![F_入力]![txt02] Or ...
という抽出条件が書かれています。

複数行に分けるというのはどういうことでしょうか

4
りんご 2023/07/19 (水) 17:05:19 935bc@0e907 >> 3

遠い昔の記憶ですが、こんな感じだったぁしら。

(略)
  qd.Parameters("[Forms]![F_入力]![txt01]") = Forms!F_入力!txt01
  qd.Parameters("[Forms]![F_入力]![txt02]") = Forms!F_入力!txt02
・・・(略)

T‘sWare Access Tips#083

5
nokonoko 2023/07/19 (水) 17:32:58 3e2e6@54883 >> 3

VBAのほうで、複数回Parametersを使うのですね。トライしてみます。

ありがとうございました。

6

テキストボックスtxt01からtxt20まであって、
製品コードがそのどれかに当てはまるものを抽出しています。

りんごさんの回答の方法でできると思いますが、参考までに別案も提示しておきます。

テキストボックスを複数個配置する代わりに、条件用のテーブルを作成してそれを利用する方法です。

製品コードと同じデータ型のフィールドをもったテーブルを作成します。
それをレコードソースとする帳票フォームを作成します。
そこで、抽出したい製品コードを入力していきます。
帳票フォームですので、新規追加していけば好きなだけ入力できます。

クエリに対象テーブルと抽出条件テーブルを追加して、対象テーブルの製品コードと条件テーブルのフィールドを結合します。

これで、条件テーブルに入力した製品コードのレコードが抽出されます。 パラメータはないので、Parametersの設定も必要ないです。クエリをOpenRecordsetするだけです。

テキストボックスを配置する方法だとテキストボックスの個数に条件数が制限されますが、この方法だと制限なく入力できます。

7
nokonoko 2023/07/20 (木) 08:17:47 3e2e6@54883 >> 6

回答ありがとうございます。
私では思いもよらない方法でした。試してみます。

8
nokonoko 2023/07/20 (木) 11:31:32 3e2e6@54883

りんご様に提示していただいた方法で無事解決しました。
qd.parametersの行が33行もあって非常に不格好なコードですが、とりあえずレコードセットにはなってくれました。

Hatena様の方法も試してみたのですが、テキストボックス以外のところで、構造を大きくかえなくてはならなくなりそうなので断念しました。

お二方有難うございました。