
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行ほどです。
これはどういった対処が必要でしょうか?
No.4ベストアンサー
- 回答日時:
#1です。
エラーの起こるレコードの他のフィールドの値を確認してみる事をお勧めします。
この回答への補足
その後、そのレコードの他の項目の長さを削ってやってみたところ、
うまくいきました。
どうも、1レコードは半角2000文字以内という制限があるようです。
今までご回答いただいた方々、ありがとうございました。
同じテーブルの他の項目も一応見てみましたが、特に変わったところはないように思いました。SELECT文で項目を絞っても出るのですが、そのテーブルの全項目も関係してくるのでしょうか。
No.5
- 回答日時:
ロックの問題だと思いますよ。
1度にロックできるレコードの件数は1000件程度です。
レジストリで変更できるはずですが。
例えば、10000件のテーブルを開いて
全レコードを選択して、DELキーを押しても
1度に削除できません。

No.3
- 回答日時:
なぜでしょうね?
mdbを作り直してみると、エラーが起こらなくなったりすることもありますが、毎回同じところで起こるのは、もっとはっきりした原因がありそうですね。
あまり、参考にならなくてすみません。
参考URL:http://oshiete1.goo.ne.jp/kotaeru.php3?q=338749

No.2
- 回答日時:
エラーはどの行で出ているのでしょうか?
直接的な回答ではありませんが、1件ずつ更新するよりUpdate文(更新クエリ)を使ったほうが早いし、簡単ですよ。
この回答への補足
SQLで、
UPDATE テーブル名 SET 結果="○" WHERE 条件式 ;
というのを作って実行してみましたが、なんと同じエラーが
発生しました。(レコードが大きすぎます。)
う~ん、なぜだろう?
ご回答ありがとうございます。
エラーは「wREC.Fields("結果") = "○"」の行で発生します。
SQLのUPDATE文の方が確かに簡単そうなので試してみます。
でも、どうもすっきりしないので、原因を知りたいのですが・・。
No.1
- 回答日時:
Access2003では緩和されているのかもしれませんが、
テキストフィールドの合計が2000バイトを越えていませんか?
また、Access2000以降ではテキストフィールドの大きさの指定がバイト数から文字数へと変更されたため、
ユーザー側での容量計算に間違いが起こる恐れがあります。
文字型フィールドに設定できる文字数は255文字となっていますが、これはあくまで文字数であってバイト数ではありません。従って最大510バイトを占めてしまいます。
文字型フィールドの文字数の既定値は255ですので、キチンと必要文字数を設定せずに使用していませんか?
ご回答ありがとうございます。
どのレコードで発生するかを絞り込んで行ったところ、ある特定の
レコードで発生することがわかりました。ところがそのレコードは
上の例では条件を満たすので○を入れようとするのですが、その
代入文で表題のエラーが発生します。○を入れる前はNULLでしたが、
それがまずいのでしょうか?○を入れる前がNULLだったケースは
このレコードが最初です。(それまでは何らかの値が入っていました。)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
Accessのフィールド数が255しかない=業務では使えない?
PowerPoint(パワーポイント)
-
ACCESSでクエリを作成したら「式が複雑すぎます。」の表記が…
その他(データベース)
-
アクセスのフォームで、文字を中央揃えにしたい
Access(アクセス)
-
-
4
accessのエクスポートエラーについて
その他(データベース)
-
5
日付型のフィールドに空白を入れる方法を教えてください
その他(データベース)
-
6
アクセスの初心者の質問です(空白の場合に他のフィールドを表示させたい。)
Access(アクセス)
-
7
「#エラー」の回避
Access(アクセス)
-
8
access vbaにてテンポラリーテーブルが作りたいです。
Access(アクセス)
-
9
Access サブフォームでの選択行の取得
その他(データベース)
-
10
空白をそのままインポートする方法について
その他(データベース)
-
11
「Columns(A:C")」の列文字を数字にして表記したい"
Excel(エクセル)
-
12
実行時エラー '3464': 抽出条件でデータ型が
Access(アクセス)
-
13
Accessでクエリを完了できません。と出ます。
その他(データベース)
-
14
アクセスのクエリでSplit関数は使えないのですか
Access(アクセス)
-
15
サブフォームに対してGoToRecordするには?
その他(Microsoft Office)
-
16
VBAで保存しないで閉じると空のBookが残る
Excel(エクセル)
-
17
Access クエリ実行が急に非常に遅くなりました。
Access(アクセス)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ADO VBA 実行時エラー3021
-
レコードが存在しなかった場合
-
Access のフォームで新しい行...
-
サブフォームに新規レコードを...
-
ヘッダレコードとトレーラレコ...
-
Accessでレコードの更新を任意...
-
ACCESSで大量の更新を行うと「...
-
[VBA] ADOの Clone と AddNew
-
ASPでMDBファイルを更新...
-
AccessVBAのMoveメソッドにつき...
-
COBOLでのランダムアクセス
-
実績累計の求め方と意味を教え...
-
OracleのSQL*PLUSで、デー...
-
Accessで別テーブルの値をフォ...
-
GROUP BYを行った後に結合した...
-
select句副問い合わせ 値の個...
-
マテビューのNOTNULL設定について
-
SQL文で右から1文字だけ削除す...
-
access 自動採番 「10-AA-000...
-
他のテーブルを参照した値はupd...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ADO VBA 実行時エラー3021
-
差し込み印刷のレコード数について
-
レコードが存在しなかった場合
-
アクセスでレポートの1印刷内...
-
DataGridViewの、選択されてい...
-
JSPのNULLレコード表示について...
-
ヘッダレコードとトレーラレコ...
-
ACCESSで大量の更新を行うと「...
-
サブレンジ分割されたNDB(富士...
-
カレントレコードが無い事を判...
-
ワードの差込印刷で教えて下さ...
-
固有レコード識別子の選択とは
-
Access でレコードセレクタが押...
-
[VBA] ADOの Clone と AddNew
-
ファイル書込みで一行もしくは...
-
DataGridViewの内容をDBに反映...
-
VB6.0のIsNull関数に相当するもの
-
Access を×ボタンで閉じ...
-
Accessデータシートビューの行...
-
Line Inputで文字化け(助けて...
おすすめ情報