Access可以使用“事务”方式执行多个Sql语句的类模块-AngelHis
Access软件网QQ交流学习群(群号码198465573),欢迎您的加入!
首页 >技术文章> Access数据库-模块/函数/VBA


Access可以使用“事务”方式执行多个Sql语句的类模块

发表时间:2022/3/5 20:15:16 评论(0) 浏览(3024)  评论 | 加入收藏 | 复制
   
摘 要:前几年自己写的类模块,目前使用还比较满意,拿出来和大家共享!
正 文:

’--------------------------------------------------

'使用方法:修改银行卡交易余额

         Dim C_ADO As New C_ADODB

                C_ADO.AddSql "Update T_BCARD_INFO set BCARD_COST = ROUND(BCARD_COST - " & BUSI_COST_OLD & ",2) " & _
                             "Where ID = " & BCARD_ID & ";"
                C_ADO.AddSql "Update T_BCARD_INFO set BCARD_COST = ROUND(BCARD_COST + " & BUSI_COST  & ",2) " & _
                             "Where ID = " & BCARD_ID & ";"
        If C_ADO.ExCol = 1 Then          MsgBox "交易信息保存成功!", vbInformation, "系统提示"

‘---------------------------------------------------------------------------------


Option Compare Database
Option Explicit
'------------创建一个类模块,命名为   C_ADODB
Public Conn As ADODB.Connection
Public sqlCol As Collection
'
Private Sub Class_Initialize()
    Set Conn = New ADODB.Connection
    Set sqlCol = New Collection
End Sub

Private Sub Class_Terminate()
    If Conn.State = 1 Then Conn.Close
    Set Conn = Nothing
    Set sqlCol = Nothing
End Sub

Public Function AddSql(ByVal StrSql As String)
    If Right(StrSql, 1) = ";" Then StrSql = Left(StrSql, Len(StrSql) - 1)
    sqlCol.Add StrSql
End Function

Public Function ExCol(Optional WARN As Integer, Optional iconn As ADODB.Connection, Optional notrs As Integer) As Integer
    Dim I As Long, j As Long   '注意:adodb不支持生成表查询,而且在客户端 Connection 对象上无效。
    Dim Conn As ADODB.Connection
    Dim FrmName As String
    If notrs = 0 Then
        On Error GoTo ExCol_Error
    Else
        On Error Resume Next
    End If
    If iconn Is Nothing Then
        Set Conn = CurrentProject.Connection    '默认打开服务器连接
    Else
        Set Conn = iconn    ' CurrentProject.Connection
    End If    '
    If sqlCol.Count = 0 or Conn.State = 0 Then Exit Function
    If notrs = 0 Then Conn.BeginTrans
    DoCmd.Hourglass True
    For I = 1 To sqlCol.Count
        err.Number = 0
        '       MsgBox sqlCol(I),,iConn
        Conn.Execute sqlCol(I), j
        If WARN = 1 And err.Number <> 0 Then
            DoCmd.Hourglass False
            MsgBox "【错误提示】:第 " & I & " 行:" & Replace(err.Description, "[Microsoft][ODBC driver for oracle][Oracle]", "") & _
                   vbNewLine & "【错误语句】:" & (sqlCol(I)), , "系统提示"
            DoCmd.Hourglass True
        End If
    Next
    DoCmd.Hourglass False
    If notrs = 0 Then
        If WARN = 1 Then
            If MsgBox("是否保存修改结果?", vbExclamation + vbYesNo + vbDefaultButton2, "提交事务") = vbYes Then
                Conn.CommitTrans    '提交事务
                ExCol = 1
            Else
                Conn.RollbackTrans
            End If
        Else
            Conn.CommitTrans    '提交事务
            ExCol = 1
        End If
    Else
        If err.Number = 0 Then ExCol = 1
    End If
    If ExCol = 1 Then
        For I = 1 To sqlCol.Count
            sqlCol.Remove 1    ' 将第一个对象删除            ' 直到删除所有对象为止。
        Next
    End If
    If Conn.State = 1 Then Conn.Close
    Exit Function
ExCol_Error:
    DoCmd.Hourglass False
    ExCol = 0
    '    FrmName = Screen.ActiveForm.Caption
    If notrs = 0 Then Conn.RollbackTrans
    If Conn.State = 1 Then Conn.Close
    MsgBox "【错误提示】:第 " & I & " 行——" & Replace(err.Description, "[Microsoft][ODBC driver for oracle][Oracle]", "") & vbNewLine & _
           "【错误语句】:" & (sqlCol(I)), , "系统提示:" & FrmName
End Function


Access软件网交流QQ群(群号:198465573)
 
 相关文章
SQL SERVER事务处理   【缪炜  2016/9/25】
怎样创建类模块  【杨雪  2016/9/27】
SQL SERVER存储过程中如何使用事务与try catch  【学习也休闲  2016/12/7】
【Access编程技巧】怎样修改模块、类模块名称  【杨雪  2017/1/7】
对treeview类模块进行了简化修改  【yuhong  2017/12/4】
简单sql事务  【萤火虫  2018/6/8】
详解SQL Server中的事务与锁问题  【宏鹏  2018/7/4】
玩玩高大上的类模块  【爱吉瑞  2019/10/5】
ADO类模块封装示例  【AngelHis  2020/2/8】
Access快速开发平台--2.5.1.462版本-主子窗体使用事...  【金宇  2021/2/2】
在 DAO 记录集中使用事务  【杨雪  2022/1/29】
常见问答
技术分类
相关资源
文章搜索
关于作者

AngelHis

文章分类

文章存档

友情链接