プロが教える店舗&オフィスのセキュリティ対策術

ACCESS2003です。

SQLのSELECT文で取得した結果に対して、条件を満たすかどうかを
判定して、1レコードずつ結果を更新していくロジックを考えました。

wSQL = "SELECT * FROM ~"

Set wREC = wCNN.OpenRecordset(wSQL, dbOpenDynaset)

Do Until wREC.EOF
If 条件を満たすか Then
wREC.Edit
wREC.Fields("結果") = "○"
wREC.Update
Else
wREC.Edit
wREC.Fields("結果") = "×"
wREC.Update
End If
wREC.MoveNext '次レコードへ
Loop

これを実行すると、途中で「レコードが大きすぎます。」というエラーが
発生します。SELECT文を*でなく、項目を絞ったのですが相変わらずです。
レコード数は1800行ほどです。

これはどういった対処が必要でしょうか?

A 回答 (6件)

#1です。


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

この回答への補足

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

補足日時:2006/09/03 22:44
    • good
    • 0
この回答へのお礼

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

お礼日時:2006/08/30 23:41

あ、1桁違いますね。


No.5 は忘れてください。
    • good
    • 0
この回答へのお礼

ありがとうございます。

ロックの可能性はなるほどと思ったのですが、
本日SQLで、

UPDATE テーブル名 SET 結果="○" WHERE 条件式 ;

というのを作って実行してみましたが、なんと同じエラーが
発生しました。(レコードが大きすぎます。)
う~ん、なぜだろう?

お礼日時:2006/08/31 23:31

ロックの問題だと思いますよ。


1度にロックできるレコードの件数は1000件程度です。
レジストリで変更できるはずですが。

例えば、10000件のテーブルを開いて
全レコードを選択して、DELキーを押しても
1度に削除できません。
    • good
    • 0

なぜでしょうね?


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

参考URL:http://oshiete1.goo.ne.jp/kotaeru.php3?q=338749
    • good
    • 0

エラーはどの行で出ているのでしょうか? 



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

この回答への補足

SQLで、

UPDATE テーブル名 SET 結果="○" WHERE 条件式 ;

というのを作って実行してみましたが、なんと同じエラーが
発生しました。(レコードが大きすぎます。)
う~ん、なぜだろう?

補足日時:2006/08/31 23:26
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
エラーは「wREC.Fields("結果") = "○"」の行で発生します。

SQLのUPDATE文の方が確かに簡単そうなので試してみます。

でも、どうもすっきりしないので、原因を知りたいのですが・・。

お礼日時:2006/08/28 23:39

Access2003では緩和されているのかもしれませんが、


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

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

お礼日時:2006/08/27 23:05

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

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


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