- ベストアンサー
ACCESSで大量の更新を行うと「レコードが大きすぎます。」
- SQLのSELECT文で取得した結果に対して、条件を満たすかどうかを判定して、1レコードずつ結果を更新していくロジックを考えました。
- 実行すると、途中で「レコードが大きすぎます。」というエラーが発生します。
- SELECT文を*でなく、項目を絞ったが相変わらずエラーが発生します。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
#1です。 エラーの起こるレコードの他のフィールドの値を確認してみる事をお勧めします。
その他の回答 (5)
- bonaron
- ベストアンサー率64% (482/745)
あ、1桁違いますね。 No.5 は忘れてください。
お礼
ありがとうございます。 ロックの可能性はなるほどと思ったのですが、 本日SQLで、 UPDATE テーブル名 SET 結果="○" WHERE 条件式 ; というのを作って実行してみましたが、なんと同じエラーが 発生しました。(レコードが大きすぎます。) う~ん、なぜだろう?
- bonaron
- ベストアンサー率64% (482/745)
ロックの問題だと思いますよ。 1度にロックできるレコードの件数は1000件程度です。 レジストリで変更できるはずですが。 例えば、10000件のテーブルを開いて 全レコードを選択して、DELキーを押しても 1度に削除できません。
なぜでしょうね? mdbを作り直してみると、エラーが起こらなくなったりすることもありますが、毎回同じところで起こるのは、もっとはっきりした原因がありそうですね。 あまり、参考にならなくてすみません。
エラーはどの行で出ているのでしょうか? 直接的な回答ではありませんが、1件ずつ更新するよりUpdate文(更新クエリ)を使ったほうが早いし、簡単ですよ。
お礼
ご回答ありがとうございます。 エラーは「wREC.Fields("結果") = "○"」の行で発生します。 SQLのUPDATE文の方が確かに簡単そうなので試してみます。 でも、どうもすっきりしないので、原因を知りたいのですが・・。
補足
SQLで、 UPDATE テーブル名 SET 結果="○" WHERE 条件式 ; というのを作って実行してみましたが、なんと同じエラーが 発生しました。(レコードが大きすぎます。) う~ん、なぜだろう?
Access2003では緩和されているのかもしれませんが、 テキストフィールドの合計が2000バイトを越えていませんか? また、Access2000以降ではテキストフィールドの大きさの指定がバイト数から文字数へと変更されたため、 ユーザー側での容量計算に間違いが起こる恐れがあります。 文字型フィールドに設定できる文字数は255文字となっていますが、これはあくまで文字数であってバイト数ではありません。従って最大510バイトを占めてしまいます。 文字型フィールドの文字数の既定値は255ですので、キチンと必要文字数を設定せずに使用していませんか?
お礼
ご回答ありがとうございます。 どのレコードで発生するかを絞り込んで行ったところ、ある特定の レコードで発生することがわかりました。ところがそのレコードは 上の例では条件を満たすので○を入れようとするのですが、その 代入文で表題のエラーが発生します。○を入れる前はNULLでしたが、 それがまずいのでしょうか?○を入れる前がNULLだったケースは このレコードが最初です。(それまでは何らかの値が入っていました。)
お礼
同じテーブルの他の項目も一応見てみましたが、特に変わったところはないように思いました。SELECT文で項目を絞っても出るのですが、そのテーブルの全項目も関係してくるのでしょうか。
補足
その後、そのレコードの他の項目の長さを削ってやってみたところ、 うまくいきました。 どうも、1レコードは半角2000文字以内という制限があるようです。 今までご回答いただいた方々、ありがとうございました。