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を指定して下さい)
です。
このエラーはどういう意味で、どうやって解決すればいいのでしょうか?

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

A 回答 (3件)

No.2で回答の自己レスです。


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

Accessはパラメータクエリーと認識しているようです。


私もこういう経験ありました。
compare.[stationNo]を変数に入れ、SQL文をちょっと面倒くさいですが
・・・ WHERE" & 変数名 & "=1;"
のようにしたところ解決しました。
試してみてください。
    • good
    • 0
この回答へのお礼

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

お礼日時:2001/05/31 09:36

正確にそうだとはいえませんが、(.[stationNo] )の部分で、stationNOはパラメータだと認識していると思います。



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

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

お礼日時:2001/05/31 09:37

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

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

このQ&Aを見た人はこんなQ&Aも見ています

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

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

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

Access97を使用しています。

SQLで組んだモジュール中に
"実行時エラー '3061'"
"パラメータが少なすぎます。1を指定して下さい。"
と表示されます。

デバッグをクリックすると下記2行目が黄色になります。

Set Database = CurrentDb
Set Table = Database.OpenRecordset("選択クエリー", dbOpenDynaset, dbReadOnly) ←

情報が少ないかもしれませんが、何故このようなメッセージが出るのでしょうか?

Aベストアンサー

選択クエリーの中に、抽出条件がパラメータを指定するかたちで入力されていると、このようになることがあります。

つまり、クエリ内のあるフィールドの抽出条件が、

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

もし意味が違ってたらごめんなさい。

選択クエリーの中に、抽出条件がパラメータを指定するかたちで入力されていると、このようになることがあります。

つまり、クエリ内のあるフィールドの抽出条件が、

Between 100 And 200

という風に値をはっきりと指定したかたちではなくて、例えば…

Between [開始IDを入力してください] And [終了IDを入力してください]

Between [Forms!][フォーム名]![テキストボックス名] And [Forms!][フォーム名]![テキストボックス名]

みたいな感じで、ユーザーに値を入力させたり、フォームのテキ...続きを読む

QAccessのRefresh・Requery・Repaintの違い

Requeryはもう一度ソースレコード(テーブル)を読み込むようです。このとき、テーブルの先頭レコードに移動してしまいます。
Refreshは最新のレコード(テーブル)を再表示するような気がします。レコードの移動は起こらない気がします。
Repaintは、VBAでキャプションなどを変更したとき使っています。
でも、よくわかっていません。
どんなときにどんなメソッドを使えばいいのでしょうか?
詳しい方、よろしくお願いいたします。

Aベストアンサー

たびたびすみません。
調べてたらこんなのがでてきました。
http://www.nurs.or.jp/~ppoy/access/access/acF007.html

参考URL:http://www.nurs.or.jp/~ppoy/access/access/acF007.html

Q「パラメータが少なすぎます。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検索を行うため、
上のようなものにしたいと考えています。
一体どうすれば、動くようになるのでしょうか?
よろしくお願いします。

Access2000で検索フォームを作っています。
フォームには、「下限」、「上限」と名前をつけたテキストボックスを2つ配置、
どちらも書式は数値型にしています。
このテキストボックスに入力した数字の範囲のレコードを抽出し、
結果を別のフォーム(「結果」)に出したいと考えてます。
そのため、以下のようなコードを書きました。

Private Sub 抽出_click()
On Error GoTo err_抽出_click
Set db = CurrentDb
Set rs = db.OpenRecordset("対象年齢", dbOpenDynaset)

rs.Filter = "対象年齢ID Betw...続きを読む

Aベストアンサー

Filterの値が"対象年齢ID Between Me!下限 And Me!上限" だと
対象年齢ID が'Me!下限'と'Me!上限'という文字列の間となってしまいます。
Filterの値を"対象年齢ID Between " & Me!下限 & " And " & Me!上限
としたらどうでしょうか?

QACCESSで空白のデーターをクエリで判定/識別する方法を教えてくださ

ACCESSで空白のデーターをクエリで判定/識別する方法を教えてください。
EXCELでは空白を""で判定/識別表していますがACCESSではどうなるのでしょうか。

下の例はフィールドに試験番号があればその番号を、空白なら”欠席”と表示しようとしています。
IIf(([試験番号]="空白の場合何を入れる?"),[試験番号],"欠席")

Aベストアンサー

もうひとつの書き方は
式1: IIf([試験番号] Is Not Null,[試験番号],"欠席")
第2、第3引数の、質問の順序にあわせるとこうなる。

QAccessで別テーブルの値をフォームに表示したい

初めてのAccessで分からない事があり質問させてください。

<会社テーブル>
会社ID
会社名
住所

<社員テーブル>
会社ID
社員名
ソート番号

*1社に対し複数の社員レコードが存在

以上のようなテーブルがあるとします

現在「会社テーブル」を表形式で一覧表示しています
会社ID,会社名、住所とフィールドが並んでいるのですが、その後ろに「社員テーブル」のソート番号が一番若い社員名を表示したいと考えています(現状は番号関係なく表示させる方法すら分かりません)

色々いじくりまわしたのですが、初めてAccessをさわる事もあってよくわかりません

リレーション等でひっぱってくる事ができるのでしょうか?

どなたか教えて頂けませんでしょうか

何卒よろしくお願い致します

PS.Access2013で作成中です

Aベストアンサー

単純にテーブル[会社]のみでフォームを作成し、社員表示用テキストボックスを追加。そして、そのプロパティを表示し

コントロールソース=DBLookup("SELECT 社員名 FROM 社員 WHERE 会社ID=" & [会社ID] & " ORDER BY ソート番号")

これは、以下の標準モジュールに登録したユーザ関数 DBLookup()を使っています。これで、クエリを用意しなくても目的を達成できます。

さて、かかるユーザ関数を標準ライブラリに登録したくない場合、

1、"社員ソートクエリ"を作成します。

SELECT 社員.会社ID, 社員.社員名
FROM 社員
ORDER BY 社員.ソート番号;

2、コントロールソースに次のように書きます。

=DLookUp("社員名","社員ソートクエリ","会社ID=" & [会社ID])

http://office.microsoft.com/ja-jp/access-help/HA001228825.aspx

DLookup()については、マイクロソフトの解説を参照されてください。

【DLookup()の限界を破るにはVBAで同じ関数を作るしかない】

マイクロソフトの解説を読めば判りますが、ORDER BY 節を指定する引数が用意されていません。ですから、どうしても、"社員ソートクエリ"を作成するという手間が必要となります。そこで、SQL文を引数とするDBLookup()をVBAで書けば、その手間を省けるという算段になります。この辺りは、好みと趣味の問題。どっちでも良いと思います。そういうお断りをした上で DBLookup()を紹介しておきます。なお、ADOは、つぎのように参照設定しないと利用できません。

http://www.happy2-island.com/access/gogo03/capter00307.shtml

Public Function DBLookup(ByVal strQuerySQL As String, _
             Optional ByVal ReturnValue = Null) As Variant
On Error GoTo Err_DBLookup
  Dim DataValue
  Dim rst     As ADODB.Recordset

  Set rst = New ADODB.Recordset
  With rst
    .Open strQuerySQL, _
       CurrentProject.Connection, _
       adOpenStatic, _
       adLockReadOnly
    If Not .BOF Then
      .MoveFirst
      DataValue = .Fields(0)
    End If
  End With
Exit_DBLookup:
On Error Resume Next
  rst.Close
  Set rst = Nothing
  DBLookup = IIf(Len(DataValue & ""), DataValue, ReturnValue)
  Exit Function
Err_DBLookup:
  MsgBox "SELECT 文の実行時にエラーが発生しました。(DBLookup)" & Chr$(13) & Chr$(13) & _
      "・Err.Description=" & Err.Description & Chr$(13) & _
      "・SQL Text=" & strQuerySQL, _
      vbExclamation, " 関数エラーメッセージ"
  Resume Exit_DBLookup
End Function

単純にテーブル[会社]のみでフォームを作成し、社員表示用テキストボックスを追加。そして、そのプロパティを表示し

コントロールソース=DBLookup("SELECT 社員名 FROM 社員 WHERE 会社ID=" & [会社ID] & " ORDER BY ソート番号")

これは、以下の標準モジュールに登録したユーザ関数 DBLookup()を使っています。これで、クエリを用意しなくても目的を達成できます。

さて、かかるユーザ関数を標準ライブラリに登録したくない場合、

1、"社員ソートクエリ"を作成します。

SELECT 社員.会社ID, 社員.社員名
FR...続きを読む

QVBAをつかってクエリの情報を抽出するには??

ACCESS VBAを使ってプログラムを組んでいるVBA初心者です。ヘルプやいろんなHPを参考にしているのですが、どうしてもわからないことがあるのでおしえてください。
クエリの情報をフォームの日付から抽出し、csvファイルを作成するというものを作ろうとしています。
クエリの抽出条件でフォームの日付の期間で抽出するようにしてあります。
VBAにてOpenRecordsetでクエリから情報を抽出しようとするのですがクエリがありませんとエラーをはかれてしまいます。クエリの指定方法がまちがっているのでしょうか?
また、以下の方法とは別の方法でクエリから抽出するやりかたがありましたら教えていただけませんでしょうか?よろしくお願いいたします。
以下にどのように記述しているか記します。
------------
Public Function value()
On Error GoTo ERRORRR
Set db = CurrentDb
Dim rs As Recordset

Set rs = db.OpenRecordset("[開通チェック]", dbOpenDynaset)
Debug.Print rs.EOF
Do Until rs.EOF
Debug.Print rs!ID
Debug.Print rs!登録状態
Debug.Print rs!開通年月日
rs.MoveNext
Loop
rs.Close: Set rs = Nothing
db.Close: Set db = Nothing
Exit Function
ERRORRR:
msgbox Err.number & ":" & Err.description
End Function

--------
開通チェック:クエリ (開通年月日には Between [Forms]![開通チェック]![開始日] And [Forms]![開通チェック]![終了日] の抽出条件が書かれています。)

使用しているACCESS Ver:ACCESS97

ACCESS VBAを使ってプログラムを組んでいるVBA初心者です。ヘルプやいろんなHPを参考にしているのですが、どうしてもわからないことがあるのでおしえてください。
クエリの情報をフォームの日付から抽出し、csvファイルを作成するというものを作ろうとしています。
クエリの抽出条件でフォームの日付の期間で抽出するようにしてあります。
VBAにてOpenRecordsetでクエリから情報を抽出しようとするのですがクエリがありませんとエラーをはかれてしまいます。クエリの指定方法がまちがっているのでしょうか?
...続きを読む

Aベストアンサー

パラメータがあるクエリはパラメータをParametersで入れてあげないと開けません。
パラメータを読み取れないのでRecordsetにクエリを渡せない状態でエラーが出ていると思います。

Dim db as Database
Dim qd as QueryDefs
Dim rs as Recordset
Dim pr1 As Date, pr2 As Date

Set db = CurrentDb()

pr1 = Format(Forms("開通チェック")("開始日"), "yyyy/mm/dd")
pr2 = Format(Forms("開通チェック")("終了日"), "yyyy/mm/dd")

Set qd = db.QueryDefs("開通チェック")
qd.Parameters("pr1").Value = pr1
qd.Parameters("pr2").Value = pr2

Set rs = qd.OpenRecordSet() 'ここでRecordsetにクエリを渡します。

これでいけると思います。

パラメータがあるクエリはパラメータをParametersで入れてあげないと開けません。
パラメータを読み取れないのでRecordsetにクエリを渡せない状態でエラーが出ていると思います。

Dim db as Database
Dim qd as QueryDefs
Dim rs as Recordset
Dim pr1 As Date, pr2 As Date

Set db = CurrentDb()

pr1 = Format(Forms("開通チェック")("開始日"), "yyyy/mm/dd")
pr2 = Format(Forms("開通チェック")("終了日"), "yyyy/mm/dd")

Set qd = db.QueryDefs("開通チェック")
qd.Parameters("pr1")....続きを読む

QAccess 別テーブルにある値を抽出条件にしたい

OS:WindowsXP SP3
使用ソフト: Microsoft Access2003


選択クエリにて、別テーブルのフィールドにある値すべてを抽出条件にできますか?


ホームページに来て頂いた方の検索キーワードを集計しております。
テーブル1には『検索キーワード履歴』フィールドがあり、お客様が使用した検索キーワードが入力されています。(約2万件)
テーブル2には『除外キーワード候補』フィールドがあり、不要なキーワードが入力されています。(約10件)


クエリにて、『検索キーワード履歴』から『除外キーワード候補』の値を全て除いた結果を出力させたいのですが、
抽出条件をどのように指定したらいいのか分かりません。

そもそも、別テーブルのフィールドにある値すべてを除外させる抽出条件って指定できるのでしょうか。
SQLを用いる方法でも構いませんので教えてください。

Aベストアンサー

SELECT * FROM テーブル1
WHERE NOT EXISTS
(SELECT * FROM テーブル2 WHERE テーブル1.検索キーワード履歴 = テーブル2.除外キーワード候補)
OR 検索キーワード履歴 IS NOT NULL
とか
SELECT * FROM テーブル1
WHERE 検索キーワード履歴 NOT IN (SELECT 除外キーワード候補 FROM テーブル2 )
ということ?
1フィールドに1キーワードの場合です。

Q抽出条件でデータ型が一致しません。のエラーメッセージが出る

フォームで入力された値を、
次のファイルでクエリを読み込むときに代入するASPを作成しましたが、実行しようとすると、
「データ型が一致しません。」のエラーメッセージが出ます。
DBはACCESSを使用しています。ACCESSの対象テーブルで、
データ型を「テキスト型」にすると問題ないのですが、
「数値型」にすると、「データ型が一致しません」の
エラーメッセージになります。
フォームでは、プルダウンで「数値」を選択するようになっています。
宜しくお願いします。

Aベストアンサー

Where区に指定した条件のフィールドが数値なら『'』でくくる必要がありません

Set rs = db.Execute("SELECT テーブル3.* FROM テーブル3 WHERE (テーブル3.番号)=" & bangou)
といった具合に修正してみましょう

『'』でくくる必要があるのは対象のフィールドが文字列の場合です

QSQL文が実行できません

単純なSQLの実行命令なのですが、
下記のエラーメッセージが出て実行できません。
解消方法をご存知の方がいらっしゃいましたら、
教えてください。よろしくお願いします。

エラーメッセージ:

Microsoft OLE DB Provider for ODBC Drivers (0x80040E10)
[Microsoft][ODBC Microsoft Access Driver] パラメータが少なすぎます。1 を指定してください。
/x_db/1.asp, line 12


(Set RS = db.Execute(SQL)のラインがエラーです)



ソースです。
<%
Set db = Server.CreateObject"ADODB.Connection")
db.Open "x_db"
SQL = "select * from x_db where w_xpc ='" & Request.Form("F01") &"'"
Set RS = db.Execute(SQL)

Response.Write(RS.Fields("氏名"))

RS.close
set RS = nothing
db.close
set db = nothing
%>

環境:WIN200server IIS5.0 access97

単純なSQLの実行命令なのですが、
下記のエラーメッセージが出て実行できません。
解消方法をご存知の方がいらっしゃいましたら、
教えてください。よろしくお願いします。

エラーメッセージ:

Microsoft OLE DB Provider for ODBC Drivers (0x80040E10)
[Microsoft][ODBC Microsoft Access Driver] パラメータが少なすぎます。1 を指定してください。
/x_db/1.asp, line 12


(Set RS = db.Execute(SQL)のラインがエラーです)



ソースです。
<%
Set db = Server.CreateObject"ADODB.Conn...続きを読む

Aベストアンサー

> パラメータが少なすぎます。1 を指定してください。
・・・(略)・・・
> SQL = "select * from x_db where w_xpc ='" & Request.Form("F01") &"'"

(1) x_db というテーブルが存在しない。
(2) w_xpc という列が x_db テーブルに存在しない。
(3) w_xpc 列は文字列ではない。
(4) Request.Form("F01")に特殊な文字(シングルクォートなど)が含まれている。

のどれかだと思います。

QAccess2010 「演算子がありません」エラー

フォーム上に別フォームを開くボタンがあるのですが、クリックすると実行時エラーが表示されます。

実行時エラー 3075
クエリ式”コード IN(○○,××)の構文エラー 演算子がありません。

コードを数値型からテキスト型に変更したのが原因だと思います。
エラーが出ない方法を教えていただければ助かります。
よろしくお願いいたします。

Dim rst As Recordset
Dim strWhere As String

Set rst = Me.RecordsetClone
With rst
If .RecordCount = 0 Then
Beep
Exit Sub
End If
.MoveFirst
strWhere = ""
Do Until .EOF
strWhere = strWhere & IIf(Len(strWhere) > 0, ",", "") & !コード
.MoveNext
Loop
.Close
strWhere = "コード IN (" & strWhere & ")"
End With

DoCmd.OpenForm "フォーム", , , strWhere

フォーム上に別フォームを開くボタンがあるのですが、クリックすると実行時エラーが表示されます。

実行時エラー 3075
クエリ式”コード IN(○○,××)の構文エラー 演算子がありません。

コードを数値型からテキスト型に変更したのが原因だと思います。
エラーが出ない方法を教えていただければ助かります。
よろしくお願いいたします。

Dim rst As Recordset
Dim strWhere As String

Set rst = Me.RecordsetClone
With rst
If .RecordCount = 0 Then
Beep
Exit Sub
End If
...続きを読む

Aベストアンサー

補足をよんでいなかったので、In句の中身の使い道
がわかりませんでした。

コード IN(○○,××)

○○,××は、元フォームに表示されているレコードになりますので


ということならば、No3の方の回答の、

strWhere = ",'" & !コード & "'"



strWhere = strWhere & ",'" & !コード & "'"

にすればよろしいかと。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報