アプリ版:「スタンプのみでお礼する」機能のリリースについて

エクセルVBA_ADO「ファイアホースモードの間はトランザクションを開始できない」

最近、エクセルVBAからSQLサーバーを編集するプログラムの勉強をはじめ、以下のサイトを読みながらテストプログラムを走らせています。
http://www.happy2-island.com/access/gogo03/capte …

そして、以下のようなコードを走らせて見ると、「ファイアホースモードの間はトランザクションを開始できません」とのエラーが出ます。

コードを以下に記します((2)トランザクションを開始します←ここで上記のエラーが出ます)
Sub prcAdoSQLServerDB()
Dim adoCON As New ADODB.Connection
Dim adoRS As ADODB.Recordset

'(1)ADOを使いSQL ServerのDBを開きます
adoCON.Open "Driver={SQL Server};" & _
"server=aaa\db; database=a1; uid=a; pwd=a;"

'レコードセットの作成(SELECT文の実行)
Set adoRS = adoCON.Execute("select * from 明細")

'レコード追加のSQLを定義(フィールド名省略すると、nullを入れようとする)
strsql = "INSERT INTO 詳細 (得意先コード) Values(000010)"

'(2)トランザクションを開始します
adoCON.BeginTrans

'(3)レコード追加のSQLを実行します
adoCON.Execute strsql

'(4)SQL実行結果の判定
If Err.Number = 0 Then
'(5)SQLが正常終了したら追加を反映します
adoCON.CommitTrans
Else
'(6)SQLが異常終了したら追加の破棄とエラー内容の表示をします
adoCON.RollbackTrans
End If

End Sub

何が原因なのでしょうか。

A 回答 (1件)

>レコードセットの作成(SELECT文の実行)


>Set adoRS = adoCON.Execute("select * from 明細")

レコード追加・更新でしたらこの部分はいりません。
adoRsはレコードセットされているので、INSERT文のExecuteはできません。ここでトランザクションがおかしくなっています。

レコードを追加するだけでしたら、

Dim adoCON As New ADODB.Connection
Dim adoRS As ADODB.Recordset

adoCON.Open "Driver={SQL Server};" & _
"server=aaa\db; database=a1; uid=a; pwd=a;"

strsql = "INSERT INTO 詳細 (得意先コード) Values(000010)"

adoCON.BeginTrans

adoCON.Execute strsql

If Err.Number = 0 Then
adoCON.CommitTrans
Else
adoCON.RollbackTrans
End If

adoCON.Close

End Sub

という感じです。
レコードセットを別に使っているのでしたら、レコードセットで拾ったら、一度トランザクションをきったほうがよいでしょう。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!