- 締切済み
レコードセットの開放のタイミングについて
いつもお世話になります。 クライアント:Excel2000(マクロ) サーバ :SQLServer2000 Dim strCon As String Dim oWK As Object Dim oDB As Object Dim strQ As String Dim rRec As RecordSet strCon = "ODBC;DRIVER=SQL Server;SERVER=hoge;UID=hoge;PWD=hoge;DATABASE=hoge" Set oWK = DBEngine.CreateWorkspace("hogewk", "hoge", "hoge", dbUseODBC) Set oDB = oWK.OpenConnection("", dbDriverNoPrompt, False, strCon) strQ = "select * from [tbl_hoge]" Set rRec = db.OpenRecordset(strQ, _ dbOpenDynamic, _ dbExecDirect, _ dbOptimisicValue) Do Until rRec.EOF = True If (条件) then oWK.Begintran 処理 oWK.Commit End If rRec.MoveNext Loop 上記のプロシージャをExcelからSQLServerに対し実行しましたが、rRec.MoveNextが エラーとなってしまいました。 oWK.Commitを実行後、問題が発生いたしました。 おそらく、oWK.CommitによりrRecレコードセットが開放されてしまったと思います。 これは仕方が無いのでしょうか。回避方法(プロシージャレベル)は御座いますでしょうか。 情報に不足がある場合、ご連絡いただけましたら補足させていただきます。 どうか宜しくお願いいたします。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
スーツのデザイナでプログラマではありませんので参考程度に・・・。 質問者のコードを参考に SQL Server 2000にExcelからアクセスしてみました。 Private Sub CommandButton1_Click() On Error GoTo Err_CommandButton1_Click Dim isError As Boolean Dim oWK As Object Dim oDB As Object Dim rRec As DAO.Recordset Dim strCon As String Dim strQ As String strCon = "ODBC;DRIVER=SQL Server;SERVER=LAVIE;UID=sa;PWD=login007;DATABASE=Sales2006SQL" strQ = "select * from [table1]" Set oWK = DBEngine.CreateWorkspace("LAVIEWK", "LAVIE", "LAVIE", dbUseODBC) Set oDB = oWK.OpenConnection("", dbDriverNoPrompt, False, strCon) Set rRec = oDB.OpenRecordset(strQ, _ dbOpenDynamic, _ dbExecDirect, _ dbOptimisticValue) With oWK .BeginTrans With rRec If Not .BOF Then .MoveFirst Do Until .EOF If .Fields(0) = 1 Then .Edit .Fields(1) = "Z" ' ロールバックされる .Update ElseIf .Fields(0) = 3 Then .Edit .Fields(0) = 1 ' エラーが発生する .Update End If .MoveNext Loop End If End With .CommitTrans End With rRec.Close oDB.Close oWK.Close Exit_CommandButton1_Click: Exit Sub Err_CommandButton1_Click: MsgBox "データの更新時にエラーが発生しました。" Resume Exit_CommandButton1_Click End Sub *これでエラーを発生させるとトランザクションがロールバックされましたので多分OKかと。 *なお、ただ単に参照するだけであれば、全体に疑問があります。