- PR -

皆様はADOでトランザクション中にエラーが発生した場合、どのようにロールバックされますでしょうか。。

1
投稿者投稿内容
McLaren
ぬし
会議室デビュー日: 2002/01/15
投稿数: 784
お住まい・勤務地: 東京
投稿日時: 2005-09-29 11:40
 大変お世話になっております。

Sub test1()
On Error GoTo hdl
'----------------------------
'エリア1 ADOとは関係ない処理
'----------------------------
(処理)
'----------------------------
'エリア2 ADO関係の処理
'----------------------------
Dim cn As ADODB.Connection
Set cn = Application.CurrentProject.Connection
cn.BeginTrans
(処理)
If (例:Formの背景が赤だったら) Then
cn.RollbackTrans
Exit Sub
End If
(処理)
cn.CommitTrans
Exit Sub
hdl:
If (トランザクション中だったら) Then
cn.RollbackTrans
Else
(エラー処理)
End If
End Sub


この(トランザクション中だったら)という部分をどのように表現すればよいでしょうか。
また、別の良い方法がありましたら合わせてご指摘、ご指導よろしくお願いいたします。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-09-29 11:43
こんにちは、じゃんぬ です。

引用:

McLarenさんの書き込み (2005-09-29 11:40) より:

この(トランザクション中だったら)という部分をどのように表現すればよいでしょうか。
また、別の良い方法がありましたら合わせてご指摘、ご指導よろしくお願いいたします。


トランザクション中だったら、という判断が不要な「制御構造」にします。
たとえ、GOTO ラベルがあろうと、構造化するのを重点的に置いてます。


_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
McLaren
ぬし
会議室デビュー日: 2002/01/15
投稿数: 784
お住まい・勤務地: 東京
投稿日時: 2005-09-29 11:55
確かにおっしゃる通りです。ありがとうございます。
例が悪いですが、(トランザクション中だったら)を取ることは可能なのかな〜と思いまして・・・

大変失礼いたしました。
ゆっきー
会議室デビュー日: 2005/09/21
投稿数: 10
投稿日時: 2005-09-29 12:02
@ ADO関係の処理部分を別subにして
そちらのエラーhdlにcn.RollbackTransを記述するというのはどうですか?

A 初歩的ですがフラグを用意するというのはどうですか?
(cn.BeginTrans時にonにするようなフラグ)
McLaren
ぬし
会議室デビュー日: 2002/01/15
投稿数: 784
お住まい・勤務地: 東京
投稿日時: 2005-10-04 18:29
ありがとうございました!
1

スキルアップ/キャリアアップ(JOB@IT)