• ベストアンサー

Access97で「パラメータが少なすぎる」のエラーとは?

Win98SE、VB6.0+SP3からAccess97のmdbを読んで処理するプログラムで、 On Error GoTo Err_Hndr Set db = OpenDatabase(sDatabase) sSQL = "select * from station WHERE compare.[stationNo] = 1;" Set rs = db.OpenRecordset(sSQL, dbOpenSnapshot) このSet rs文のあと、エラールーチンに飛んでしまいます。 エラーコードは3061(パラメータが少なすぎます。1を指定して下さい) です。 このエラーはどういう意味で、どうやって解決すればいいのでしょうか?

  • prome
  • お礼率73% (74/101)

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

  • ベストアンサー
  • nika912
  • ベストアンサー率100% (1/1)
回答No.3

No.2で回答の自己レスです。 大変申し訳ありません。勘違いでした。 私が、解決したのは ・・・WHERE フィールド名 =" & 変数名 & ";" というやり方でした。これならおわかりでしたよね。 今後はよく状況を把握して回答します。

その他の回答 (2)

  • nika912
  • ベストアンサー率100% (1/1)
回答No.2

Accessはパラメータクエリーと認識しているようです。 私もこういう経験ありました。 compare.[stationNo]を変数に入れ、SQL文をちょっと面倒くさいですが ・・・ WHERE" & 変数名 & "=1;" のようにしたところ解決しました。 試してみてください。

prome
質問者

お礼

ありがとうございます。返事が遅れてすみません。

  • msystem
  • ベストアンサー率42% (79/186)
回答No.1

正確にそうだとはいえませんが、(.[stationNo] )の部分で、stationNOはパラメータだと認識していると思います。 やりたいことがはっきりわからないので正確にいえませんが、解消方法は、パラメータに値をセットするか、compareテーブルのstationNOフィールドが1のものという意味であれば、[]をとってください。(でもそれだと、SQL文自体がおかしいような気がしますが・・・)

prome
質問者

お礼

ありがとうございます。返事が遅れてすみません。

関連するQ&A

  • 「パラメータが少なすぎます。3を指定してください。」って???

    Access2000で検索フォームを作っています。 フォームには、「下限」、「上限」と名前をつけたテキストボックスを2つ配置、 どちらも書式は数値型にしています。 このテキストボックスに入力した数字の範囲のレコードを抽出し、 結果を別のフォーム(「結果」)に出したいと考えてます。 そのため、以下のようなコードを書きました。 Private Sub 抽出_click() On Error GoTo err_抽出_click Set db = CurrentDb Set rs = db.OpenRecordset("対象年齢", dbOpenDynaset) rs.Filter = "対象年齢ID Between Me!下限 And Me!上限" Set rs = rs.OpenRecordset DoCmd.OpenForm "結果", , , , acFormReadOnly rs.Close exit_抽出_click: Exit Sub err_抽出_click: MsgBox Err.Description Resume exit_抽出_click End Sub 「結果」フォームは対象年齢テーブルを基にしています。 これを実行すると、「パラメータが少なすぎます。3を指定してください。」という メッセージが出てしまうのですが、 Private Sub 抽出_click() On Error GoTo err_抽出_click DoCmd.OpenForm "結果", , , "[対象年齢ID] Between [Forms]![検索]![下限] And [Forms]![検索]![上限]", acFormReadOnly exit_抽出_click: Exit Sub err_抽出_click: MsgBox Err.Description Resume exit_抽出_click End Sub だと実行できます。 条件がこれ1つならば、下を使うのですが、 実際には、データ型の異なる複数の条件のAND検索を行うため、 上のようなものにしたいと考えています。 一体どうすれば、動くようになるのでしょうか? よろしくお願いします。

  • Access2002のVBAエラーで

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

  • Access2002 VB がエラー

    Access2002 VBで以下のコーディングをしてます Dim db As Database Dim rs As Recordset Dim fld As Field Set db = CurrentDb Set rs = db.OpenRecordset("ConvertChar") これを実行するとdb宣言行で以下のエラーが表示されます。 コンパイルエラー: ユーザ定義型は定義されていません。 これは何が原因でエラーとなるのでしょうか? 宜しくお願いします。

  • 別のMDBのフォームを開く操作をしているのですがエラーになってしまいま

    別のMDBのフォームを開く操作をしているのですがエラーになってしまいます (Access2003 SP3を使用) Function keisan() Dim obj As Access.Application Dim db_name As String Dim tmpDB As Database Dim tabname As String Dim tdynaset as Recordset Dim KeisanKekka as Boolean ’MDBのフォームを開く db_name="c:\keisan.mde" Set obj = GetObject(db_name) obj.DoCmd.OpenForm "計算", acNormal, , , , acDialog obj.Application.Quit Set obj = Nothing '計算結果をもってくる Set tmpDB = OpenDatabase(db_name)'ここでエラー**** Set tdynaset = tmpDB.OpenRecordset("select 計算結果 from データ", dbOpenSnapshot, dbForwardOnly) KeisanKekka = Nz(tdynaset.Fields(0), False) tdynaset.Close Set tdynaset = Nothing tmpDB.Close Set tmpDB = Nothing End Function これで1回目は上手くできるのですが2回目からOpenDatabaseのところでエラーになってしまいます 「実行時エラー3045 c:\keisan.mdbは既に使用されているので、使用できませんでした」 GetObjectの解放はしているのになぜこのようなエラーがでてしまうのでしょうか・・・ 別のPCでもやってみたのですが同じエラーが起こりました どうかよろしくお願いします

  • DBの読み込み順について

    VBAでACCESSのテーブルを順番に読んでいきたいのですが、 読み込みの順番が、実際に入っているデータと異なっていてばらばらです。 先頭から順番に読んでいきたいのですが、どうしたらよいのでしょうか。 Public Function DateCheck() On Error GoTo ErrExit Dim db As Database Dim rs As Recordset Set db = CurrentDb() With Application.CurrentDb Set rs = .OpenRecordset("テーブル名", dbOpenSnapshot) rs.MoveFirst Debug.Print rs!STAFFCD Do Until rs.EOF Debug.Print rs!STAFFCD rs.MoveNext Loop rs.Close db.Close End With Exit Function ErrExit:

  • エラー3011

    パス名もきちんと設定し、データもあっているのですが オブジェクトが存在しないか、名前、パス名が違うと エラーがでてしまいます。どこが違うのでしょうか? Dim db As String Dim db_Mdb As DAO.Database Dim rd_Mdb As DAO.Recordset Dim stSQL As String db = "C:\XXX\VB\kanri.mdb"   'パス名は、アドレスをコピー貼り付けしたので間違いないと思います) ”省略(データベースに接続)” stSQL = "select * from name where bango=0001;" Set rd_Mdb = db_Mdb.OpenRecordset(stSQL, dbOpenTable) お願いしますm(__)m

  • Yes/Noフラグの値をコピーできない

    すいません。ACCESS2003 VBAで下記の問題で困っています。 新たに作成したmdbファイル(テーブルの中身は空)に既存のmdbファイルのテーブル内容をコピーしたいのですが、Yes/Noフラグ型だけ移行できません。一応サンプルのソースです↓ Dim db As DAO.Database Dim RS As DAO.Recordset Dim strsql As String コピー元のmdbファイルをオープン Set db = OpenDatabase("コピー元mdb") 'SQLの生成 strsql = "" strsql = strsql & " SELECT * FROM テーブル名" 'レコードセット生成 Set RS = db.OpenRecordset(strsql, dbOpenSnapshot, dbReadOnly) 'コピー元テーブルにデータがあるか判定 If RS.RecordCount = 0 Then msgbox "データがありません" Else RS.MoveFirst 'コピー先のデータベースを設定 Set db = OpenDatabase("コピー先mdb") 'レコードの初期化 db.Execute (DELETE FROM コピー先テーブル名) Do While RS.EOF = False strsql = "" strsql = strsql & " INSERT INTO コピー先テーブル名(" strsql = strsql & " ,コピー先のYes/Noフラグ値" ' strsql = strsql & ")VALUES(" strsql = strsql & " ,'"コピー元のYes/Noフラグ値 "' " strsql = strsql & ")" db.Execute (strsql) RS.MoveNext Loop End If RS.Close db.Close

  • DAO エクセルvbaからアクセスのレコードの件数

    DAOで、エクセルvbaからアクセスのレコードの件数を取得したいのですが Dim ac As Object Dim db As DAO.Database Dim rs As DAO.Recordset Set ac = CreateObject("Access.Application") Set db = ac.DBEngine.OpenDatabase("D:\あああ.accdb", False, True) Set rs = db.OpenRecordset("SELECT * FROM Tマスタ WHERE masterkey like '*四*';") i = rs.RecordCount Debug.Print rs("masterkey") rs.Close: Set rs = Nothing db.Close: Set db = Nothing ac.Quit: Set ac = Nothing をすると、抽出するレコードが1000件でも、必ず1が返ります。 masterkeyフィールドは文字列型です。 なぜ実際はたくさんのレコードがあるのに、1が返るのでしょうか?

  • Accessのリンクテーブル

    すみません、教えてください。 Accessで複数端末から一つのMDBにデータ登録をさせる為に、VBAでツールを作っています。以下のように記述をして いるのですが、MDBを閉じるたびに、リンク先のDBを認識しなくなってしまいます。テーブルでリンクを貼りなおすとまた動くようになるのですが、どうしたらリンクを貼りなおせずにできるようになるのか、どなたか教えてください。どうかお願いいたします。 Dim LinkDB as Database Dim RST AS Recordset Set LinkDB = WorkSpaces(0).OpenDatabase("リンク先のDBの名前") Set RST = LinkDB.OpenRecordset("テーブル名",DbOpenTable)

  • AccessのMDBのオープンエラーについて

    環境:Windows98 + VB5.0(SP3) + Access97 VBプログラムで、Access-MDBのオープンの為、以下の命令を発行します。 Set DB = OpenDatabase("D:\・・・\Md1.mdb") 通常問題無く動いているのですが、たまに以下のエラーが発生します。 エラー番号:3343 エラー内容:データベースの形式 'D:\・・・\Md1.mdb' を認識できません。 このエラー発生後は、REPAIR命令で修復しなければなりません。 このエラーの理由・対策等をお教え下さい。 少し古い環境での問題なので、既に語り尽くされているのかもしれませんが、よろしくお願いします。

専門家に質問してみよう