クエリで抽出したレコードを利用したいのですがうまくいきません。

Dim ds As Database
Dim rs As Recordset
Set ds = CurrentDb
Set rs = ds.OpenRecordset("クエリ名")

デバッグすると 
Set rs = ds.OpenRecordset("クエリ名") で止まります。

「実行時エラー’3061’
パラメータが少なすぎます。1を指定してください」のメッセージです。
どのような意味でしょう。教えてください。

このQ&Aに関連する最新のQ&A

A 回答 (4件)

フォームのテキストボックスの値を利用する方法として、とりあえず私が思いつくのは、


(1)クエリーを一旦テーブルにして保存し(テーブル作成クエリーでも使うのが簡単かな?)、そのテーブルを元に Recordset を開く。
(2)Recordset の Filter プロパティを利用して、抽出条件を後から設定する。
の二通りぐらいです。(これがベストな方法かわかりませんので、自信なしのアドバイスです。)

以下に、(2)の方法の例を示します。

まず、クエリーのテキストボックスの値を参照する抽出条件を外しておいてください。

Dim db As Database, rs As Recordset, rsFiltered As Recordset
Set db = CurrentDb
Set rs = db.OpenRecordset("クエリー名")
rs.Filter = テキストボックスの値を使った抽出条件 '(クエリーの WHERE 以降の部分。データ型や「“」、「’」、リテラルの付加等に注意して記述してください。)
Set rsFiltered = rs.OpenRecordset

以上で、rsFilteredが、求める Recordset になります。

HELPで、DAOの Filter プロパティを確認してみてください。
うまくいかない場合は、補足で、Q_個人情報クエリーのSQLビューを示していただけると、もっと具体的なアドバイスができると思います。
(土日は追加回答ができませんことを、ご了承ください。)
    • good
    • 0
この回答へのお礼

親切丁寧なご回答をありがとうございます。
お礼が送れてすみません。

(1)(2)とも出来まして大変勉強になりました。

今後ともよろしく。

お礼日時:2002/04/17 06:37

gonta_gomaさんのアドバイスが、可能性大だと思いますが、



もし、Q_個人情報クエリーを開く際に、パラメータの入力を要求されない場合でも、抽出条件にフォームの例えばテキストボックスの値などを参照している場合も、同様のメッセージが出ます。

差し支えなければ、Q_個人情報クエリーのSQL文ビューを示していただけると、原因がわかるかもしれませんが?

この回答への補足

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

まさしく、その通りです。
抽出条件にフォームのテキストボックスの値を参照しています。
と言う事は 抽出条件にフォームのテキストボックスの値を参照さすことは出来ないのですか?
あつかましい質問と思いますが、どうしてもフォームのテキストボックスで値を入力してクエリで抽出したレコードを利用したいのですが方法があれば教えてください。
よろしく。

補足日時:2002/04/11 17:33
    • good
    • 0

「パラメータが少なすぎます。

1を指定してください」」というのは要するにクエリーが間違っているという事です。
これは予想ですが、Q_個人情報を開こうとすると、ダイアログボックスが表示されて、何か入力してくれといわれるのじゃないでしょうか。
SLQを直接編集しなくても、クエリーを作った後でフィールド名を変更したりすればこの様な現象は起こります。
Q_個人情報 を正しくもう一度つくりなおしたらいかがでしょうか。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます
お礼遅れてすみません

お礼日時:2002/04/11 17:32

こんにちは。

maruru01です。

指定したクエリ名によって起こることがあるようです。
どのようなクエリ名でしょうか。
また、OpenRecordsetの第1引数にSQLステートメントを指定する場合に、文字数が制限(多分255文字)を越えると同じエラーが出るようです。
では。

この回答への補足

早速ご回答ありがとうございます。

クエリ名は Q_個人情報 です。

SLQステートメントはまだ勉強をしてないので使っていません。

補足日時:2002/04/10 13:07
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QAccessVBAで「dim dbs as database」がエラーになる

済みませんが、非常に基本的なことを聞かせていただきたいと思います。

AccessのVBAで関数を実行すると、いきなりエラーになりました。
dim dbs as database の文でエラーになり、「コンパイルエラー ユーザ定義型が定義されていません」というエラーメッセージが出ました。
databaseが定義されているような感じです。

どうすれば宜しいでしょうか?

Aベストアンサー

こんにちは。maruru01です。

VBEの画面のメニューの[ツール]→[参照設定]で、

「Microsoft DAO X.X Object Library」(X.Xはバージョン)

の項目にチェックが入っていますか?

ちなみに、DatabaseオブジェクトはDAOしかないのでいいですが、Recordsetオブジェクトなどは、ADOとDAOの両方にあるので、

Dim rs As DAO.Recordset

のように、どちらかを明確に記述しないといけません。
統一的で分かりやすいコーディングのためには、Databaseオブジェクトも、

Dim dbs As DAO.Database

のように記述するように心がけましょう。

Q変数の宣言の名称を教えてください。(Dim i As Long)

Dim i As Longについて

「dim」→?
「i」→変数名
「As」→?
「Long」→変数の型

というように、dimとAsがなんと言えばいいのかわかりません。
アドバイスよろしくお願いします。

Aベストアンサー

>「i」→変数名
という形と合わせるのなら、以下のような感じでしょうか?
(意味についてのご質問ではないと受け取りました)

Dim・・・ステートメント
     変数の(型)宣言に用いる
AS・・・・キーワード
     変数や関数の型を示したり、フォルダ(やファイル)名を
     示したりするのに用いる

QACCESSのクエリの中でのクエリ指定

ACCESSのクエリで複数テーブルを結合させ明細表示させました。
その明細作成クエリーを更にそのクエリをテーブルと指定して
合計のクエリを作成して結果を確認すると合計が違っていました。
確認の為、集計を取りその明細クエリーをクエリー上でテーブル
指定してみたところ、元の明細クエリーのみの場合とレコード数
がかわっって表示されまました。
クエリーのテーブルにクエリを指定するのはNGなのでしょうか。
何方かなぜそうなるのか、また、正しい方法があれば教えてください。
宜しくお願いします。

Aベストアンサー

クエリーのテーブルにクエリを指定するのはNGではありません。

SQL文が無いので何処が悪いのかなんともいえません。

Qaccess 更新クエリ?追加クエリ?

access超初心者です。

いま、下記のような在庫表をつくっています。
(出庫テーブルは省略してます)



入庫テーブル
 ID
 入庫日付
 大分類
 中分類
 小分類
 数量
 
在庫テーブル
 ID
 大分類 
 中分類 
 小分類
 最初の数
 入庫数 
 出庫数

入庫更新クエリ
*入庫→在庫  大分類
       中分類   
       小分類
・入庫の全レコードと在庫表の同じ結合フィールドのレコードだけを含める

で結合しています。

*在庫表の入庫数
 レコードの更新で
 NZ([在庫数]![入庫数],0)+NZ([入庫]![数量],0)

といれています。




入庫テーブルに入力していき
その都度、
入庫更新クエリにて更新し
在庫表に反映させていきたいと思っています。

入庫表には、この先
在庫表にないものもでてくるので
在庫表にないものは
追加、あるものは、更新としていきたいです。

今の状態だと
入庫表のものは、更新クエリでいったん在庫表に反映されるのですが
入庫表にレコードを追加して
また更新クエリをかけると
在庫表が、前に更新したレコードの分も
重複して反映してしまいます。

これをなくすには、どういった方法が
ありますか?

宜しくお願いいたします

access超初心者です。

いま、下記のような在庫表をつくっています。
(出庫テーブルは省略してます)



入庫テーブル
 ID
 入庫日付
 大分類
 中分類
 小分類
 数量
 
在庫テーブル
 ID
 大分類 
 中分類 
 小分類
 最初の数
 入庫数 
 出庫数

入庫更新クエリ
*入庫→在庫  大分類
       中分類   
       小分類
・入庫の全レコードと在庫表の同じ結合フィールドのレコードだけを含める

で結合しています...続きを読む

Aベストアンサー

No1です。入庫データをクリアするのではなく、記帳のときに記帳済みのマークを入れておいて、入庫更新クエリーのとき記帳すみのマークのあるものを除外するほうがよさそうです。

Q追加クエリ???更新クエリ???

アクセスでデータベースを管理しようとしているものです。
利用しようとするデータ10万件をcsvからインポートしました。
その10万件のデータを定期的にエクセルに落としては(1000件ほど)修正を加えて、また元のデータに上書きするといった方法を取りたいのですが。

例:
書籍一覧
No.作品名 出版元 作家名 人気度(%) コメント

みたいなデータが10万件。
例えばコメントや人気度が空欄のデータもあり、クエリで抽出→EXCELで編集(コメント等の記入)→インポートして元データに上書き。
という流れをしたいのですが。
利用するクエリがイマイチわかりません。
もしかしたら物凄い簡単な事かもしれないのですが、かなり混乱しててまとまった考えができない状態です。

また、上記のデータに確実に被っている作品群がエクセルにあり(共通のIDなし)、それは上記のデータのどのIDにあたるかまで特定できエクセルで纏めるところまでは出来たのですが、共通のIDであることは確かなのに、アクセスにインポートしてリレーションで結んでもうまく突合してくれません。

10万件のデータのデータ型がオートナンバー式であるのに対し、エクセルで纏めた方のIDは数値型というのが問題なのでしょうか?(その割にはリレーションの段階でエラーは出ないのですが)。
エクセル時代の書式がいけないかとも思い確かめたりしたのですが。
原因が分かりません。

パラパラと質問してしまいましたが、どなかた分かる方がいらっしゃれば宜しくお願いいたします。

アクセスでデータベースを管理しようとしているものです。
利用しようとするデータ10万件をcsvからインポートしました。
その10万件のデータを定期的にエクセルに落としては(1000件ほど)修正を加えて、また元のデータに上書きするといった方法を取りたいのですが。

例:
書籍一覧
No.作品名 出版元 作家名 人気度(%) コメント

みたいなデータが10万件。
例えばコメントや人気度が空欄のデータもあり、クエリで抽出→EXCELで編集(コメント等の記入)→インポートして元データに上書き。
という流...続きを読む

Aベストアンサー

>>その10万件のデータを定期的にエクセルに落としては(1000件ほど)修正を加えて、また元のデータに上書きするといった方法を取りたいのですが。

 なぜ、こういう運用にするのか疑問ですね。アクセスにデータをインポートしたら、アクセス上でデータを更新するのが普通だと思いますが。こういう運用はトラブルになりやすいです。

>>例えばコメントや人気度が空欄のデータもあり、クエリで抽出→EXCELで編集(コメント等の記入)→インポートして元データに上書き。

 →インポートして元データに上書き。
ではなく、
 →一時テーブルにインポート→一時テーブルと元テーブルを更新クエリで更新する

となるのでは?また、普通は、オートナンバーをマッチングキーに使用しないほうがいいと思います。

 ということで、とりあえず、CSVデータを100件程度に絞って、自分がやりたい更新処理がまともにできるか実験してみるのがいいと思います。


人気Q&Aランキング

おすすめ情報