@IT会議室は、ITエンジニアに特化した質問・回答コミュニティ「QA@IT」に生まれ変わりました。ぜひご利用ください。
- PR -

分散(手動)トランザクションの不具合について

1
投稿者投稿内容
納涼床
ベテラン
会議室デビュー日: 2006/06/28
投稿数: 53
お住まい・勤務地: 京都市下京区
投稿日時: 2007-11-06 15:52
あるプロシージャを実行中に
「手動または分散トランザクションモードのため、新規接続を作成できません。」
というエラーが発生しました。

そのプロシージャには
レコードセットをオープンしたまま
レコードセットを1レコード読むごとに
別のテーブルを更新するという処理があるのですが
その処理が影響しているのでしょうか?

なお、開発アプリケーションはVB6.0、
データベースはSQL SERVER 2005です。
以下にソースの概略をあげておきます。



'ここでレコードセットRSを作成
strSql=(SELECT文)

If DB_Select(PROGRAM_ID, "USER", "RS", strSQL, False) = False Then
Exit Sub
End If

'RSが末尾になるまで処理を続ける
Do Until RS.EOF

'RSの内容を読み込み、worktableにレコードをINSERTする
strSQL= (INSERT文)

If DB_Execute(PROGRAM_ID, "USER", strSQL) = False Then
Call DB_Rollback("USER")
Exit Sub
End If

RS.MoveNext

Loop

'RSを閉じる
Call RS_Close(PROGRAM_ID, "RS")

'別のRSを作成
strSQL=(SELECT文)

If DB_Select(PROGRAM_ID, "USER", "RS", strSQL, False) = False Then
Exit Sub
End If

'RSの末尾まで処理を続ける
Do Until RS.EOF

'項目とデータのペアが20あって、条件によってworktableの更新を行う
For int項目 = 1 To 20

'ここでworktableをUPDATE(場合によって更新する列が異なる)
Select Case Nzs(RS("控除項目" & Format(int項目, "00")))
Case gstr控除項目コード健康保険
If Worktable_Update("数値項目8", int項目) = False Then
Exit Sub
End If
Case gstr控除項目コード介護保険
If Worktable_Update("数値項目9", int項目) = False Then
Exit Sub
End If
Case gstr控除項目コード厚生年金
If Worktable_Update("数値項目10", int項目) = False Then
Exit Sub
End If
Case gstr控除項目コード雇用保険
If Worktable_Update("数値項目11", int項目) = False Then
Exit Sub
End If
Case gstr控除項目コード所得税
If Worktable_Update("数値項目12", int項目) = False Then
Exit Sub
End If
End Select

Next

'WORKTABLEをUPDATE
strSQL=(UPDATE文)

If DB_Execute(PROGRAM_ID, "USER", strSQL) = False Then
Call DB_Rollback("USER")
Exit Sub
End If

RS.MoveNext

Loop

'RSを閉じる
Call RS_Close(PROGRAM_ID, "RS")

'ワークテーブルをコミット
Call DB_Commit("USER")

[ メッセージ編集済み 編集者: 納涼床 編集日時 2007-11-06 15:55 ]
1

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