
現在サーババージョンアップに伴うストアドの動作検証を行っています。
内容としては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も見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ストアドでXMLファイルを読込む...
-
SQLServerのトリガ機能について...
-
ストアド更新履歴
-
「マスタ」と「テーブル」の違...
-
3つ以上のテーブルをUNIONする...
-
インデックスの再構築の意味っ...
-
SELECT時の行ロックの必要性に...
-
Accessにインポートしたら並び...
-
SELECT文でのデッドロックに対...
-
オラクルではできるのにSQLSERV...
-
SQLServer Insertが遅い
-
accessのエクスポートエラーに...
-
ユニオンクエリの結果をテーブ...
-
accessテーブル作成クエリを実...
-
重複レコードの削除
-
DataTableから条件を満たした行...
-
Access VBA [リモートサーバー...
-
ACCESSのSQLで、NULLかNULLでな...
-
ACCESSのODBCリンクテーブルに...
-
Accessでクエリを完了できませ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
SQLServer 分散トランザクショ...
-
エクセルアドインの使用方法に...
-
ストアド、トリガーの同時呼出
-
ストアドプロシージャでのファ...
-
ストアド更新履歴
-
ストアドプロシージャの多用で...
-
トリガが完全にかからない
-
EXCELのマクロ
-
ストアドプロシージャーのパラ...
-
SQLServer7.0 重大な例外「EXCE...
-
ストアドでコンピュータ名の取得
-
ワードを開くと「オブジェクト...
-
SQL Server INSERTのトリガで採番
-
SQL鯖2000ストアドでの定数
-
SQLでORを略す方法
-
ソリューションエクスプローラ...
-
ストアド(PL/SQL)でログイン処...
-
SQL2000でのTRUNCATE TABLE
-
ストアドプロシージャ
-
SQL Serverトリガの中でDMLの種...
おすすめ情報