• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ACCESSで大量の更新を行うと「レコードが大きすぎます。」)

ACCESSで大量の更新を行うと「レコードが大きすぎます。」

このQ&Aのポイント
  • SQLのSELECT文で取得した結果に対して、条件を満たすかどうかを判定して、1レコードずつ結果を更新していくロジックを考えました。
  • 実行すると、途中で「レコードが大きすぎます。」というエラーが発生します。
  • SELECT文を*でなく、項目を絞ったが相変わらずエラーが発生します。

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

  • ベストアンサー
noname#79209
noname#79209
回答No.4

#1です。 エラーの起こるレコードの他のフィールドの値を確認してみる事をお勧めします。

nozomi300k
質問者

お礼

同じテーブルの他の項目も一応見てみましたが、特に変わったところはないように思いました。SELECT文で項目を絞っても出るのですが、そのテーブルの全項目も関係してくるのでしょうか。

nozomi300k
質問者

補足

その後、そのレコードの他の項目の長さを削ってやってみたところ、 うまくいきました。 どうも、1レコードは半角2000文字以内という制限があるようです。 今までご回答いただいた方々、ありがとうございました。

その他の回答 (5)

  • bonaron
  • ベストアンサー率64% (482/745)
回答No.6

あ、1桁違いますね。 No.5 は忘れてください。

nozomi300k
質問者

お礼

ありがとうございます。 ロックの可能性はなるほどと思ったのですが、 本日SQLで、 UPDATE テーブル名 SET 結果="○" WHERE 条件式 ; というのを作って実行してみましたが、なんと同じエラーが 発生しました。(レコードが大きすぎます。) う~ん、なぜだろう?

  • bonaron
  • ベストアンサー率64% (482/745)
回答No.5

ロックの問題だと思いますよ。 1度にロックできるレコードの件数は1000件程度です。 レジストリで変更できるはずですが。 例えば、10000件のテーブルを開いて 全レコードを選択して、DELキーを押しても 1度に削除できません。

noname#60992
noname#60992
回答No.3

なぜでしょうね? mdbを作り直してみると、エラーが起こらなくなったりすることもありますが、毎回同じところで起こるのは、もっとはっきりした原因がありそうですね。 あまり、参考にならなくてすみません。

参考URL:
http://oshiete1.goo.ne.jp/kotaeru.php3?q=338749
noname#60992
noname#60992
回答No.2

エラーはどの行で出ているのでしょうか?  直接的な回答ではありませんが、1件ずつ更新するよりUpdate文(更新クエリ)を使ったほうが早いし、簡単ですよ。

nozomi300k
質問者

お礼

ご回答ありがとうございます。 エラーは「wREC.Fields("結果") = "○"」の行で発生します。 SQLのUPDATE文の方が確かに簡単そうなので試してみます。 でも、どうもすっきりしないので、原因を知りたいのですが・・。

nozomi300k
質問者

補足

SQLで、 UPDATE テーブル名 SET 結果="○" WHERE 条件式 ; というのを作って実行してみましたが、なんと同じエラーが 発生しました。(レコードが大きすぎます。) う~ん、なぜだろう?

noname#79209
noname#79209
回答No.1

Access2003では緩和されているのかもしれませんが、 テキストフィールドの合計が2000バイトを越えていませんか? また、Access2000以降ではテキストフィールドの大きさの指定がバイト数から文字数へと変更されたため、 ユーザー側での容量計算に間違いが起こる恐れがあります。 文字型フィールドに設定できる文字数は255文字となっていますが、これはあくまで文字数であってバイト数ではありません。従って最大510バイトを占めてしまいます。 文字型フィールドの文字数の既定値は255ですので、キチンと必要文字数を設定せずに使用していませんか?

nozomi300k
質問者

お礼

ご回答ありがとうございます。 どのレコードで発生するかを絞り込んで行ったところ、ある特定の レコードで発生することがわかりました。ところがそのレコードは 上の例では条件を満たすので○を入れようとするのですが、その 代入文で表題のエラーが発生します。○を入れる前はNULLでしたが、 それがまずいのでしょうか?○を入れる前がNULLだったケースは このレコードが最初です。(それまでは何らかの値が入っていました。)

関連するQ&A