• ベストアンサー

"パラメータが少なすぎます。1を指定して下さい。"

Access97を使用しています。 SQLで組んだモジュール中に "実行時エラー '3061'" "パラメータが少なすぎます。1を指定して下さい。" と表示されます。 デバッグをクリックすると下記2行目が黄色になります。 Set Database = CurrentDb Set Table = Database.OpenRecordset("選択クエリー", dbOpenDynaset, dbReadOnly) ← 情報が少ないかもしれませんが、何故このようなメッセージが出るのでしょうか?

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

  • ベストアンサー
  • gadd3
  • ベストアンサー率46% (211/451)
回答No.4

選択クエリーの中に、抽出条件がパラメータを指定するかたちで入力されていると、このようになることがあります。 つまり、クエリ内のあるフィールドの抽出条件が、 Between 100 And 200 という風に値をはっきりと指定したかたちではなくて、例えば… Between [開始IDを入力してください] And [終了IDを入力してください] Between [Forms!][フォーム名]![テキストボックス名] And [Forms!][フォーム名]![テキストボックス名] みたいな感じで、ユーザーに値を入力させたり、フォームのテキストボックスの値を流用するみたいになってると、値がすぐに定まらないせいか(?)、OpenRecordsetを使うとご質問のようなエラーになります。(単純にクエリをダブルクリックで開くだけとか、Docmdでクエリを開く場合ならエラーになりません。OpenRecordsetを使ってクエリを開こうとするとエラーになります。) 回避する方法としては、●直接VBA内でSQLを書いて、パラメータ部分を変数などを使って直接値を指定してレコードセットを取り出す…などで行けると思うのですが、それ以外にも簡単な方法があるので、以下のURLを参照してみてください。 http://ws.31rsm.ne.jp/~pension/access/tips/benri1.htm#parameter もし意味が違ってたらごめんなさい。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (3)

  • toku8
  • ベストアンサー率26% (64/246)
回答No.3

わたしは Dim DBS As Database Dim rr1 As Recordset * * Set DBS = CurrentDb Set rr1 = DBS.OpenRecordset("FILE11") If rr1.EOF Then GoTo LAST1 rr1.MoveFirst Do Until rr1.EOF * * rr1.MoveNext Loop としています ご参考まで

全文を見る
すると、全ての回答が全文表示されます。
  • taknt
  • ベストアンサー率19% (1556/7783)
回答No.2
全文を見る
すると、全ての回答が全文表示されます。
  • miya_777
  • ベストアンサー率31% (44/140)
回答No.1

「選択クエリー」のSQLに問題があります。 おそらくはSQLが不完全だと思われます。 VBAでなく単独で実行してみてください。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • Access2002のVBAエラーで

    クエリで抽出したレコードを利用したいのですがうまくいきません。 Dim ds As Database Dim rs As Recordset Set ds = CurrentDb Set rs = ds.OpenRecordset("クエリ名") デバッグすると  Set rs = ds.OpenRecordset("クエリ名") で止まります。 「実行時エラー’3061’ パラメータが少なすぎます。1を指定してください」のメッセージです。 どのような意味でしょう。教えてください。

  • OpenRecordSet  他について

    Accessプロジェクトを使用しています。 Dim strSQL As String Dim DBS As Database Dim RST As DAO.Recordset Set DBS = CurrentDb Set RST = DBS.OpenRecordset("TESTDATA", dbOpenDynaset,dbReadOnly) 「実行時エラー'91': オブジェクト変数またはWithブロック変数が設定されていません。」 と出てきます。デバッグを押すと、 上記最終行でSTOPします。 次のように変更しても同じでした。 Set RST = DBS.OpenRecordset("TESTDATA") 又は Set RST = DBS.OpenRecordset("TESTDATA", dbOpenDynaset) ヘルプ等を見ると、Jetワークスペースでのみ 使用可と出てきます。 ADO,DAO,OpenRecordset等が理解しきれていないように思うのですが、 Access97(DAO?)では 何も出てこなかった上記のような内容、 何故Accessプロジェクトでは 上手くいかないのでしょうか?

  • ACCESS について

    下記 イメージがわかりません  CurrentDB,OpenRecordset,dbOpenDynaset,dbReadOnly  アクセスで、オラクルのDBを使用していますが  上記のところで詰まっています。  "一旦、ファイルを、どういう状態で開くか" ってことでしょうか?  宜しくお願いします。

  • ACCESS97のMAX関数について

    ACCESS97を使用しています。 "関数"の使い方が全くわかりません。 (というより、SQLも含めて…)  テーブル"TBL_A"の"項目B" から最大値を変数SDHSに取得したいのですが どうすればいいのでしょうか?  Dim db As DATABASE Dim RS As Recordset Dim SDHS, strSQL As String Set db = CurrentDb() strSQL = "SELECT Max(項目B) FROM TBL_A ;" Set RS = db.OpenRecordset(strSQL, dbOpenDynaset, dbReadOnly) SDHS = Max(項目B)

  • SQLのパラメータ・・

    たびたびお世話になっております。 顧客マスタの新規コードを、最大値に1を足して生成しています。 既存の顧客コードの最大値を求める為、 Dim mySQL as Stirng,Rst as Recordset mySQL="SELECT Max(局コード) AS 局コードの最大, 会社コード FROM 顧客マスタ GROUP BY 会社コード HAVING (会社コード=[Forms]![フォーム]![テキスト1]);" Set Rst = CurrentDB.OpenRecordset(mySQL) というSQL文をかきました。 ところが、SQLをレコードセットにすると「パラメータが少なすぎます。1を指定してください(3061)」というエラーメッセージが出てしまいます。 クエリーを作成して実行しても正しい結果を返すのに、SQLだとダメなのはなぜなのでしょうか。 どうぞよろしくお願いいたします。

  • SQLの条件分に ( ) が入っている場合

    Access97を使用しています。 SQLの条件で、項目名に '(' が入っている場合 どうすればいいのでしょうか? 例えば 下記の場合 " 式に未定義関数 '出荷日'があります " と出てきます。 Set DB = CurrentDb() strSQL = "SELECT SUM(数量) AS A FROM GAH100 WHERE " strSQL = strSQL + "出荷日(新)='" & Me.日付入力 "';" Set RS = DB.OpenRecordset(strSQL, dbOpenDynaset, dbReadOnly) 項目名に() が無いようにするしかないのでしょうか?

  • VBAのコード

    参考書に従って次のようなコードを書きました。 Private Sub previewButton_Click() Dim db as DAO.Database Dim rs as DAO.Recordset Set db = CurrentDb Set rs = db.OpenRecordset("Q_ラベル印刷", dbOpenDynaset)* if me!......................以下略 *印のところで「パラメーターが少なすぎます。1を指定してください。」というメッセージが出ます。 どう直せばいいのでしょうか。 よろしくお願いします。

  • SQLSERVERからデータを取得する方法

    SQLSERVERに商品テーブルを作り ACCESSにローカルテーブル(下記の例では入力テーブル)を 作りました。 ACCESS VBAで ACCESSのローカルテーブルを1件ずつ読み SQLSERVERの商品テーブルを検索したいのですが 下記の例 どちらが処理スピードが速いのですか? なお下記以外にも処理スピードが速い方法が あったら教えてください。 ●例1 Dim db As DATABASE Dim rs As Recordset   dim rt as Recordset Set db = CurrentDb Set rt = db.OpenRecordset("入力テーブル", dbOpenDynaset) sql = "SELECT 商品名 FROM 商品テーブル " sql = sql & "where 商品ID = '" & rt![商品ID] & "'" Set rs = db.OpenRecordset(sql) If rs.RecordCount = 0 Then MsgBox "NG" Else MsgBox rs![商品名] End If ●例2 Dim db As DATABASE Dim rs As Recordset   dim rt as Recordset Set db = CurrentDb Set rt = db.OpenRecordset("入力テーブル", dbOpenDynaset) Set rs = db.OpenRecordset("商品テーブル", dbOpenDynaset) rs.FindFirst "商品CD = '" & rt![商品CD] & "'" If rs.NoMatch Then MsgBox "NG" Else MsgBox rs![商品名] End If よろしくお願いします。

  • 実行時エラー3061 パラメーターが少なすぎます

    顧客情報を入力したフォームで顧客情報を入力した際 実行時エラー3061 パラメーターが少なすぎます。 1を指定してください。 と表示されましたが、これはどう処理すればよろしいでしょうか? デバックを表示で Set Rst = CurrentDb.OpenRecordset(strSQL) が黄色くなりました。 Access2010を使用しています。 よろしくお願い致します。

  • [ACCESS/VBA]動的にSQL文をテーブルから抽出する方法?

    ボロボロです。知恵が足りずとても困っています。どなたか教えてください。 テーブル「T_SQL」の各レコードに、 クエリのSQL文(フィールド名=「strSQL」)と クエリ名(フィールド名=「QName」)と 通しNo.(フィールド名=「No」) をデータとして入力し、アクション等に応じて、「T_SQL」から 抽出したSQL文を、 マクロの「プロシージャの実行」の プロシージャ名 SetSQL("クエリー1",FindSQL(No)) により クエリ「クエリー1」に代入したいのです。 現在以下の通りに作りました。 'データベース定義 Public db As Database 'レコードセット定義 Public rs As Recordset Public Function SetSQL(QName As String, strSQL As String) CurrentDb.QueryDefs("QName").SQL = strSQL End Function Public Function FindSQL(No As String) Set db = CurrentDb() Set rs = db.OpenRecordset("T_SQL", dbopendynaset) strcriteria = "[No]='" & No & "'" rs.FindFirst strcriteria FindSQL = rs!strSQL rs.Close db.Close End Function これで実行すると、 「コンパイルエラー メソッドまたはデータメンバが 見つかりません」 というエラーメッセージが出ます。 ちょこちょこいろんなところを修正してみても、 このメッセージだけでなく他にもいろんな エラーメッセージが出ます。 冒頭に書いたような機能を可能にするには、 どのように記述すればよいのでしょうか?? ほんとにほんとに困っています。どなたか助けてください。

このQ&Aのポイント
  • 知人のFMVで故障して修理されて戻ってきたのですが、SSDが交換されているため初期状態でOfficeがアクティベーションされていない状態です。
  • Officeソフトを起動するとプロダクトキーの入力を求められるようですが、手元にプロダクトキーが無いようで困っています。
  • どうすればよろしいでしょうか?
回答を見る

専門家に質問してみよう