お世話になっております。
あるフォーム[F_入力]と、そのフォームのコントロールの値をパラメータにしたクエリ[Q_抽出]があります。
このクエリで抽出したデータをエクセルに出力するために、レコードセットに入れたいのですがうまくいきません。
Dim qd as DAO.QueryDef
Dim rs as DAO.Recordset
set qd = currentDb.QueryDefs("Q_抽出")
qd.Parametes("とっても長い")=とっても長い
Set rs=qd.openrecordset
...
とっても長いのところが、参照するコントロールが多くて長くなってます。
長いからなのか、エラーが出てしまいます。
Q_抽出のデータを、いったんテーブルにしてから、レコードセットとして取り込む方法も考えましたが、よくわかりませんでした。
初歩的な質問、かつ情報不足とは思いますが、ヒントをいただければと思います。
1番オーソドックスな解決法
T‘sWare Access Tips#586
最終手段、「クエリ パラメータ」ダイアログボックスを開いて設定した上で、同じコード(パラメータを指定する)を再試行。
T‘sWare Access Tips#542
もし上記リンク失敗の際は、ググって下さい。
>とっても長いのところが、参照するコントロールが多くて長くなってます。
もし複数のパラメータを1句に詰め込んでいるのであれば、とりあえず複数行に分けましょう。
回答ありがとうございました。
テキストボックスtxt01からtxt20まであって、
製品コードがそのどれかに当てはまるものを抽出しています。
おかげで(というか、初歩的なので)
[Forms]![F_入力]![txt01] Or [Forms]![F_入力]![txt02] Or ...
という抽出条件が書かれています。
複数行に分けるというのはどういうことでしょうか
遠い昔の記憶ですが、こんな感じだったぁしら。
T‘sWare Access Tips#083
VBAのほうで、複数回Parametersを使うのですね。トライしてみます。
ありがとうございました。
りんごさんの回答の方法でできると思いますが、参考までに別案も提示しておきます。
テキストボックスを複数個配置する代わりに、条件用のテーブルを作成してそれを利用する方法です。
製品コードと同じデータ型のフィールドをもったテーブルを作成します。
それをレコードソースとする帳票フォームを作成します。
そこで、抽出したい製品コードを入力していきます。
帳票フォームですので、新規追加していけば好きなだけ入力できます。
クエリに対象テーブルと抽出条件テーブルを追加して、対象テーブルの製品コードと条件テーブルのフィールドを結合します。
これで、条件テーブルに入力した製品コードのレコードが抽出されます。 パラメータはないので、Parametersの設定も必要ないです。クエリをOpenRecordsetするだけです。
テキストボックスを配置する方法だとテキストボックスの個数に条件数が制限されますが、この方法だと制限なく入力できます。
回答ありがとうございます。
私では思いもよらない方法でした。試してみます。
りんご様に提示していただいた方法で無事解決しました。
qd.parametersの行が33行もあって非常に不格好なコードですが、とりあえずレコードセットにはなってくれました。
Hatena様の方法も試してみたのですが、テキストボックス以外のところで、構造を大きくかえなくてはならなくなりそうなので断念しました。
お二方有難うございました。