みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

【AccessVBA】レコードセットOpen時の引数について

AccessVBAで、以下のように記述して実行したらOpen時にエラーが出てしまいました。
エラーは、「SQLステートメントが正しくありません。'DELETE'、'INSERT'、'PROCEDURE'、'SELECT'、または'UPDATE'を使用してください。」というものでした。

Dim cn As ADODB.Connection
Dim rs1 As ADODB.Recordset
Set cn = CurrentProject.Connection
Set rs1 = New ADODB.Recordset

rs1.Open "Q_F_新規契約登録_定期取引ヘッダ内容抽出", cn, adOpenForwardOnly, adLockReadOnly

いろいろと調べて、Open時の引数を一つ加えて、Openの行を以下のように書いたのですが、またエラーが出てしまいました。
エラーは、「一つ以上の必要なパラメータが設定されていません。」というものです。

rs1.Open "Q_F_新規契約登録_定期取引ヘッダ内容抽出", cn, adOpenForwardOnly, adLockReadOnly, adCmdTable

この記述はどこが間違っているのでしょうか。
足りないパラメータとは、何のことなのか、教えていただけないでしょうか。

投稿日時 - 2006-09-15 20:30:17

QNo.2408871

すぐに回答ほしいです

質問者が選んだベストアンサー

VBA の記述には問題ありません。
問題があるのはクエリの記述です。
クエリ単独では正しく動作するんですよね。
この場合考えられるのは、
(1)パラメータクエリであること。
(2)抽出条件などで、フォームのコントロールを参照したものがあること
などです。

(1)なら、「一つ以上の必要なパラメータが設定されていません。」というエラーメッセージでピンとくるでしょうから、この先(2)として話を進めます。

例として、クエリの[ID]フィールドに
抽出条件 [Forms]![フォーム名]![ID]が書かれているものとします。

標準モジュールにフォームの[ID]の値を返すプロシージャを作成します。
例えば
  Public Function GetFormID() As Variant
    GetFormID=[Forms]![フォーム名]![ID]
  End Function
クエリの抽出条件を
  =GetFormID()
とします。

DAO に限られますが、Qerydef の Parameter を使う方法もあります。

投稿日時 - 2006-09-16 08:57:09

お礼

ご回答を読み、さらにいろいろと調べて
エラーを回避できました。
ありがとうございました。

根本的な原因は、私が「Openするクエリには条件指定が存在してはいけない」ということを知らなかったことです。
Openで指定しているクエリには、ご指摘の通りフォーム上のコントロールを抽出条件として設定していました。

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

投稿日時 - 2006-09-19 09:50:57

ANo.2

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

念のためですが、"Q_F_新規契約登録_定期取引ヘッダ内容抽出"が存在することを確認してください。
半角全角のチェックもしてください。

投稿日時 - 2006-09-16 08:46:10

あなたにオススメの質問