現在サーババージョンアップに伴うストアドの動作検証を行っています。
内容としては2000で動作していたものを2008R2に移行するだけです。
そこでひとつ問題が発生して作業がとまってしまいましたので、
お力を借りたく、質問させていただきます。
環境としては、クライアントはACCESSプログラム、DBはSQLServerとなっています。
ストアドの実行で下記のように記載していたプログラムが動作しなくなりました。
Set adoCN = New ADODB.Connection
adoCN.Open CurrentProject.Connection
adoCN.BeginTrans
adoCN.Execute "exec dbo.実行ストアド"
'エラー判定
adoCN.CommitTrans
上記エラー判定で「リンク サーバー "(null)" の OLE DB プロバイダー "SQLNCLI10" から、
メッセージ "アクティブなトランザクションがありません。" が返されました。」
となってしまいます。
また、このストアド内では「SET XACT_ABORT ON ~ SET XACT_ABORT OFF」
としてあります。
ちなみに、上記「adoCN.BeginTrans」、「adoCN.CommitTrans」をコメントすると、
正常に動作しました。
「SET XACT_ABORT ON」としているので「adoCN.BeginTrans」はなくてもいいと思うのですが、
明確に『不要である』としている文献等、見つからなかったため、迷っています。
サーバはバージョンアップに伴い、分散トランザクションを使用するようになっていますが、
この変更が影響しているのかどうか、まったく別の原因なのか、わからない状態です。
うまく伝わっているか心配ですが、どうぞ宜しくお願い致します。
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
>「SET XACT_ABORT ON」としているので「adoCN.BeginTrans」はなくてもいいと思うのですが
Set adoCN = New ADODB.Connection
adoCN.Open CurrentProject.Connection
adoCN.BeginTrans
adoCN.Execute "exec dbo.実行ストアド"
insert into アクセスのテーブル values(1)
'エラー判定
adoCN.CommitTrans
とかだと、
adoCN.BeginTransとadoCN.CommitTransはなくては困るはず。
(アクセスのテーブルへのinsertがストアドの結果に関係なく実行されるから。)
ということで
>明確に『不要である』としている文献等、見つからなかったため
は見つからないと思います。
ストアドプロシジャ内のどの命令でエラーがでているのかが不明なので
(⇒これを特定するのが先のように思いますが)
はっきりしたことはわかりませんが、
>このストアド内では「SET XACT_ABORT ON ~ SET XACT_ABORT OFF」としてあります
のほうが問題なのでは?
## SET XACT_ABORT ONなんて気持ち悪くて使う気にならないので使ったことはないので
## 良く分かりませんが
クライアントのadoのトランザクションの中で、突然、sqlserverにトランザクション制御を
任せるような命令を出したらなにかおかしくなるようにしか思えないです。
SET XACT_ABORT ON ~ SET XACT_ABORT OFF
を
Begin Transaction ~ Commit
にしてエラー制御をきちんと書いて、エラーならロールバックするようにしてみたら?
と思います。
(SQL Serverはトランザクションの入れ子がOKだったはずなのでbegin transactionを
書いても大丈夫だったと思いますが、ダメならストアド側でトランザクション制御はしないとか。)
## 的外れだったらごめんなさいね。
返信が遅れてすみませんでした。
処理をご回答いただいた「Begin Transaction ~ Commit」に変更し、
無事に解決できました。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) DoCmd.SearchForRecord が動かない時の解決方法 3 2022/07/22 15:31
- Access(アクセス) アクセス テーブルの空白を変数に置換するボタンが作りたい 4 2022/07/08 11:19
- Visual Basic(VBA) VBAでの共有パスにつきまして 1 2023/03/04 17:24
- Visual Basic(VBA) ExcelからAccessのテーブルに書き込む時に時間がかかる 1 2022/10/14 20:38
- Visual Basic(VBA) ACCESS DAO で不要なテーブルのフィールド(列)の削除 4 2022/06/23 12:13
- Excel(エクセル) EXCELの外部データ取得ができない 1 2023/03/23 09:03
- Excel(エクセル) エクセルVBA 作業後に選択範囲を解除する方法 5 2023/02/17 07:13
- MySQL #1062 - '0' は索引 'PRIMARY' で重複しています。とでています。 1 2023/01/01 06:13
- IT・エンジニアリング インフラエンジニア(ネットワークエンジニア)の検証業務について教えてください。 インフラ初心者なので 2 2022/06/26 00:08
- Excel(エクセル) エクセル 値をコピペした時に、条件付き書式で塗られた背景色もペーストさせる 2 2023/04/05 17:21
このQ&Aを見た人はこんなQ&Aも見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
分散トランザクションを開始できなかった
SQL Server
-
(Windows7)VB6でODBC接続エラー
iOS
-
SQLServer2005 リンクサーバーのトランザクションについて
SQL Server
-
-
4
手動または分散トランザクションモード…のエラー
Visual Basic(VBA)
-
5
(SQLSERVER) 別サーバーへテーブルコピー
SQL Server
-
6
日付型のフィールドに空白を入れる方法を教えてください
その他(データベース)
-
7
ACCESSでコントロールソースの変更
Access(アクセス)
-
8
VB6+SQL サーバー 2000 で 実行時エラー '3704' がでます:
Visual Basic(VBA)
-
9
バッチファイルでサーバーのファイルをクライアントへコピーしたい
その他(コンピューター・テクノロジー)
-
10
VBAでエクセルシートを更新(リフレッシュ)する方法を教えて下さい。
Excel(エクセル)
-
11
ActiveX DLLでのオラクルのトランザクション
Oracle
-
12
共通モジュールでDBへの接続と利用方法
Visual Basic(VBA)
-
13
SQLでスキーマ名(所有者名)の修飾無しでテーブル参照したい
SQL Server
-
14
レコードが存在しなかった場合
Microsoft ASP
-
15
処理件数を非表示にしたい
SQL Server
-
16
【DB】同じトランザクション内でupdateとselectをしたときの結果値
その他(データベース)
-
17
VB.NETで DataRow()を利用して、値からコードを取得したい。
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
SQLServer 分散トランザクショ...
-
「マスタ」と「テーブル」の違...
-
ACCESSのSQLで、NULLかNULLでな...
-
2つのテーブルから条件に一致...
-
3つ以上のテーブルをUNIONする...
-
重複するキーから一番古い年月...
-
[ BETWEEN ] vs [ >= AND <= ]
-
ACCESS 一番最新の日付の金額...
-
ACCESS2007 フォーム 「バリア...
-
Access VBA Me.Requery レコー...
-
accessテーブル作成クエリを実...
-
accessのロック
-
ManagementStudioからのデータ削除
-
Accessのリンクテーブルについて
-
オラクルではできるのにSQLSERV...
-
Access VBA [リモートサーバー...
-
PostgreSQLで外部DB内のテーブ...
-
ビューで引数を使いたい
-
sqlserverで集計結果をUPDATEし...
-
SI Object Browserのテーブルス...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SQLServer 分散トランザクショ...
-
エクセルアドインの使用方法に...
-
ストアドプロシージャでのファ...
-
トリガが完全にかからない
-
ストアド更新履歴
-
ストアドプロシージャーのパラ...
-
ストアド、トリガーの同時呼出
-
SQL Server INSERTのトリガで採番
-
ストアドプロシージャの多用で...
-
SQLServer7.0 重大な例外「EXCE...
-
T-SQLで一時テーブルの名前を毎...
-
SQL Serverトリガの中でDMLの種...
-
ソリューションエクスプローラ...
-
ストアド(PL/SQL)でログイン処...
-
SQLServerのトリガ機能について...
-
「マスタ」と「テーブル」の違...
-
[ BETWEEN ] vs [ >= AND <= ]
-
2つのテーブルから条件に一致...
-
ACCESSのSQLで、NULLかNULLでな...
-
オラクルではできるのにSQLSERV...
おすすめ情報