Access98のVBAでプログラムを組み、RecordsetをUpdateしたり、Deleteしたりしていると、『実行時エラー'3003':ネストしているトランザクションが多すぎるため、トランザクションを開始できませんでした』とエラーが発生します。
「トランザクション」の意味が分かりませんが、プログラムの中では、「トランザクション」なるモノを定義や設定したりしておりません。
ヘルプを閲覧すると「BeginTrans」「CommitTrans」「Rollback」と云う難しそうな言葉が出てきました。
エラーが発生しないようにするためには、プログラムの中にどの様なエラー回避の語を書き込んで置けば良いのでしょうか?
No.2ベストアンサー
- 回答日時:
>RecordsetのrsをPublic rs As Recordset宣言して
コレがまずいかも…
レコードセットは出来るだけローカルで宣言しましょう。
>Closeすることで完結するのですか?
OpenRecordSetで生成されてから、 .Closeするか、その変数(インスタンス)が破棄されるまで、レコードセットは有効です。
Updateは、単にDBにデータを格納するだけの操作です。
DBプログラミングの世界では、一つのレコードセット/カーソルを開きっぱなしにして、Closeもせずに何度も使いまわしにすることは、「やってはいけないこと」の一つだとされています。
上記は、仮にソフトが完璧であれば、別にやっても構わないんことなんですが、DBの方では「積もり積もったら悪影響が出る」系のバグを誘発しますし、アプリケーション側では、「今、どのレコードセットが開いてる/閉じてるのかを(プログラマが)思い違える」系のバグを埋め込みやすくなります。
今回のエラーの原因がそこにあるのかどうかは分からないんですが、トランザクションを使っていないのに、お書きになったエラーが発生するとしたら、まず疑うのはCloseのし忘れでしょう。
No.1
- 回答日時:
Access98 というと、Macの方ですか?
Windows版しか触ったことがないので、違っているかも知れませんが…
例えば、Recordsetを大量に開きまくって、全然Closeしていないとかの箇所はありませんか?
この回答への補足
ARCさん 前回(11/4)の質問(Form位置を知る方法=APIを使う)ではお世話になりました。
Macではなく、OSはWindows Meです。Formを二つ開いてます。RecordsetのrsをPublic rs As Recordset宣言して、rsを開くのは一つのSubプロシージャだけで、Set rs = CurrentDb.OpenRecordset・・・としてます。他の複数(5ヶ所)のSubプロシージャでもrsを記述してますが、開く事はしてません。ですから開いているRecordsetは、一つだけとなるはずですが・・・?
rsをCloseする記述は一つも有りません。
変更するデータは、rs.Updateとする事で完全に更新されて保存されると考えるのは間違いですか?
Closeすることで完結するのですか? そのあたりの概念が理解出来ていないのでしょうか・・・? 宜しくご教授願います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Windows 10 Windows Updateが動作しません 7 2022/08/12 16:26
- Visual Basic(VBA) ExcelからAccessのテーブルに書き込む時に時間がかかる 1 2022/10/14 20:38
- その他(プログラミング・Web制作) ラズパイ上の、pythonのエラーについて 1 2023/04/12 23:27
- Windows 10 数年前からWindows10 の Update ができないです。なぜですか? 7 2022/11/09 06:03
- Excel(エクセル) EXCELの外部データ取得ができない 1 2023/03/23 09:03
- その他(プログラミング・Web制作) pythonで、elseなどを連続させる場合 1 2022/07/17 12:27
- Windows 10 Windows Updateの更新ができない場合に初期化 3 2023/01/18 20:00
- Visual Basic(VBA) Excel-VBAでのファイルの開き方 4 2023/02/14 11:01
- Visual Basic(VBA) ACCESS DAO で不要なテーブルのフィールド(列)の削除 4 2022/06/23 12:13
- その他(プログラミング・Web制作) IT初心者です 仕事で、vb.netで作成されたdllをvbaで呼び出すプログラムを作成しろと言われ 1 2023/03/27 08:22
このQ&Aを見た人はこんなQ&Aも見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
SQL文で パラメータが少なすぎます エラー
Access(アクセス)
-
サブフォームに対してGoToRecordするには?
その他(Microsoft Office)
-
ACCESSのSQLで、NULLかNULLでないかの判定
その他(データベース)
-
-
4
Access サブフォームでの選択行の取得
その他(データベース)
-
5
アクセスで数値型のフィールドにNullをいれたい
その他(データベース)
-
6
Accessで数値型にNULLをInsertするとエラー
その他(データベース)
-
7
「RunSQL」と「Execute」の違い
Access(アクセス)
-
8
ACCESS──メインフォームでサブフォームのレコード件数をカウントしたい
Access(アクセス)
-
9
新規レコード行を非表示にしたい
Access(アクセス)
-
10
ACCESS VBAの実行時エラーなんですが
PowerPoint(パワーポイント)
-
11
AccessVBAで作成したExcelファイルを削除する方法は?
Visual Basic(VBA)
-
12
フォームを開くときに、コンボボックスの値を選択(アクセスVBA)
Visual Basic(VBA)
-
13
Accessでテーブル名やクエリ名一覧の抜き出し
Access(アクセス)
-
14
アクセスのエラー「クエリには出力フィールドが1つ以上必要です。」
その他(Microsoft Office)
-
15
ACCESSサブフォームにデータ反映されない
Access(アクセス)
-
16
アクセス 壊れた? 「ファイルが見つかりません」
Access(アクセス)
-
17
どこにもフォーカスを当てたくない
Access(アクセス)
-
18
親・子リンクフィールドの設定は、どうすればよいのでしょうか。
その他(Microsoft Office)
-
19
レコードを保存するコード アクセスvba
その他(Microsoft Office)
-
20
アクセスのfilter、複数条件の記述方法を教えてください。
Access(アクセス)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
データベースファイル(.db)を開...
-
android版のMs accessはありま...
-
Accessフォームからパラメータ...
-
リスト形式の表とデータベース...
-
警察はスマホに保存した動画や...
-
エクセル
-
コンピュータがインターネット...
-
コンピュータ用語、データベー...
-
QSL でのフォーム画面作成について
-
エクスプローラーで「2つの条件...
-
汎用カード型のデータベースソ...
-
データベースソフトの「TCARD f...
-
マクロの別シートのデータ振り...
-
DBのタイプの指定とサイズにつ...
-
縦書きテキストボックスの表示"...
-
c言語の問題です。これを踏まえ...
-
Q&Aフォームを作成したいのです...
-
「1004:アプリケーション定義...
-
AWSのcloud9で「 ls -l ~/.ssh/...
-
ファイルメーカーへネットワー...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【DB】同じトランザクション内...
-
postgresql についてです
-
TPSとは・・・
-
Accessdでの「トランザクション...
-
一つのトランザクションでSELEC...
-
ADO Connection を再利用する方法
-
dbFailOnError とは?
-
SAPのSPROって何の略ですか?
-
OracleのROWIDについて…
-
SQL Server 2005トランザクショ...
-
汎用系システムのDBについて
-
INSERT分の処理速度がトランザ...
-
accessVBAでのワークスペース
-
jmeterについて、教えてください。
-
ロールフォワードとロールバッ...
-
ロールバックとロールフォワー...
-
DBサーバー妥当性
-
DBMSのロールフォワードについて
-
オラクルのロールバックセグメ...
-
MySQLとPostgleSQL、ど...
おすすめ情報