• ベストアンサー

【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 この記述はどこが間違っているのでしょうか。 足りないパラメータとは、何のことなのか、教えていただけないでしょうか。

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

  • ベストアンサー
  • bonaron
  • ベストアンサー率64% (482/745)
回答No.2

VBA の記述には問題ありません。 問題があるのはクエリの記述です。 クエリ単独では正しく動作するんですよね。 この場合考えられるのは、 (1)パラメータクエリであること。 (2)抽出条件などで、フォームのコントロールを参照したものがあること などです。 (1)なら、「一つ以上の必要なパラメータが設定されていません。」というエラーメッセージでピンとくるでしょうから、この先(2)として話を進めます。 例として、クエリの[ID]フィールドに 抽出条件 [Forms]![フォーム名]![ID]が書かれているものとします。 標準モジュールにフォームの[ID]の値を返すプロシージャを作成します。 例えば   Public Function GetFormID() As Variant     GetFormID=[Forms]![フォーム名]![ID]   End Function クエリの抽出条件を   =GetFormID() とします。 DAO に限られますが、Qerydef の Parameter を使う方法もあります。

stolichnaya
質問者

お礼

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

その他の回答 (1)

  • nekotaru
  • ベストアンサー率50% (22/44)
回答No.1

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