レコードセットのエラー
投稿者 shu  (社会人)
投稿日時
2011/5/21 21:35:50
[Forms].[年賀メール].[m年] の部分がテーブルにないので
パラメータとして認識されパラメータ指定が1個不足しているので1(個)を
指定して下さいというエラーです。
簡単な修正なら
> Forms].[年賀メール].[m年]
を " & Forms].[年賀メール].[m年] & "
にすればいいです。
この修正はSQLインジェクションの問題が発生する可能性があるのでパラメータ化
することが推奨されています。ただこの場合、入力値の文字数とか内容のチェックが
されていればこの修正で大丈夫かと思います。
パラメータとして認識されパラメータ指定が1個不足しているので1(個)を
指定して下さいというエラーです。
簡単な修正なら
> Forms].[年賀メール].[m年]
を " & Forms].[年賀メール].[m年] & "
にすればいいです。
この修正はSQLインジェクションの問題が発生する可能性があるのでパラメータ化
することが推奨されています。ただこの場合、入力値の文字数とか内容のチェックが
されていればこの修正で大丈夫かと思います。
投稿者 dao  (社会人)
投稿日時
2011/5/22 09:50:46
まったくうまくいけません。
"SELECT 受け取った人.[年], 受け取った人.[NO] FROM 受け取った人 WHERE (((受け取った人.年)=" & Forms![年賀メール].[m年] & "));"
これであっていますか。
実行してみたら
すぐにレコードが1件しかないのに「インデックス有効範囲がありません」って出ます。
教えてください
"SELECT 受け取った人.[年], 受け取った人.[NO] FROM 受け取った人 WHERE (((受け取った人.年)=" & Forms![年賀メール].[m年] & "));"
これであっていますか。
実行してみたら
hrs.MoveFirst
i = 0
Do Until hrs.EOF
i = i + 1
n(i) = hrs("年")
NNB(i) = hrs("NO")
Loop
すぐにレコードが1件しかないのに「インデックス有効範囲がありません」って出ます。
教えてください
投稿者 るきお  (社会人)
投稿日時
2011/5/22 13:37:09
こんにちは。
>まったくうまくいけません。
なぜそのように考えたのでしょうか?
はじめの、「パラメーターが少なすぎます。1を指定してください。」というエラーがでなくなったということはむしろうまくいったとは考えられませんか?
>すぐにレコードが1件しかないのに「インデックス有効範囲がありません」って出ます。
多分「インデックスが有効範囲にありません」でしょうか?
エラーで困って質問する場合はエラーが発生する行がどこだかわかるようにしましょう。
エラーになるのが
>n(i) = hrs("年")
か、
>NNB(i) = hrs("NO")
の行であれば、レコードが101件以上あるからかと思います。
まずはどの行でエラーになるかを書きましょう。
上記の行でエラーになるのであればその時 i はいくつか確認しましょう。
>まったくうまくいけません。
なぜそのように考えたのでしょうか?
はじめの、「パラメーターが少なすぎます。1を指定してください。」というエラーがでなくなったということはむしろうまくいったとは考えられませんか?
>すぐにレコードが1件しかないのに「インデックス有効範囲がありません」って出ます。
多分「インデックスが有効範囲にありません」でしょうか?
エラーで困って質問する場合はエラーが発生する行がどこだかわかるようにしましょう。
エラーになるのが
>n(i) = hrs("年")
か、
>NNB(i) = hrs("NO")
の行であれば、レコードが101件以上あるからかと思います。
まずはどの行でエラーになるかを書きましょう。
上記の行でエラーになるのであればその時 i はいくつか確認しましょう。
投稿者 shu  (社会人)
投稿日時
2011/5/23 13:52:27
> NNB(i) = hrs("NO")
の下に hrs.MoveNextがないと同じレコードでずっとループするので
配列の範囲を超えてしまいエラーとなってしまいます。
最初のエラーとはまったく関係ありません。
またるきおさんが指摘されているようにレコード数が配列の要素数を超えてしまうと
結局同じエラーが発生することになります。これに対する処理も追加された方が良いかと
思います。
の下に hrs.MoveNextがないと同じレコードでずっとループするので
配列の範囲を超えてしまいエラーとなってしまいます。
最初のエラーとはまったく関係ありません。
またるきおさんが指摘されているようにレコード数が配列の要素数を超えてしまうと
結局同じエラーが発生することになります。これに対する処理も追加された方が良いかと
思います。
投稿者 dao  (社会人)
投稿日時
2011/5/23 20:02:20
すいません。movenextをうち忘れていました。無地にプログラムうまくできました。ありがとうございました
投稿者 るきお  (社会人)
投稿日時
2011/5/23 21:25:32
>hrs.MoveNextがないと同じレコードでずっとループ
これか!
見逃してました。
私もときどきやりましたよ。
いつまでたっても処理が終わらないななんて言ったりして…。
これか!
見逃してました。
私もときどきやりましたよ。
いつまでたっても処理が終わらないななんて言ったりして…。
Access2010で開発しているプログラムです。
実行したら、「Set hrs = DB.OpenRecordset(sql) 」のところで「パラメーターが少なすぎます。1を指定してください。」というエラーが出ます。「1」を指定するとテーブルタイプなので、もちろん「SQL分は使えません」というエラーが出ます。この解決方法があれば教えてください
皆さんのお力お貸しください。