天天看點

使用“事務”執行多個Sql語句的類子產品

前幾年自己寫的類子產品,目前使用還比較滿意,拿出來和大家共享!

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

'使用方法:修改銀行卡交易餘額

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) " & _

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

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 '預設打開伺服器連接配接

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)), , "系統提示"

Next

If WARN = 1 Then

If MsgBox("是否儲存修改結果?", vbExclamation + vbYesNo + vbDefaultButton2, "送出事務") = vbYes Then

Conn.CommitTrans '送出事務

ExCol = 1

Conn.RollbackTrans

If err.Number = 0 Then ExCol = 1

If ExCol = 1 Then

sqlCol.Remove 1 ' 将第一個對象删除 ' 直到删除所有對象為止。

Exit Function

ExCol_Error:

ExCol = 0

' FrmName = Screen.ActiveForm.Caption

If notrs = 0 Then Conn.RollbackTrans

MsgBox "【錯誤提示】:第 " & I & " 行——" & Replace(err.Description, "[Microsoft][ODBC driver for oracle][Oracle]", "") & vbNewLine & _

"【錯誤語句】:" & (sqlCol(I)), , "系統提示:" & FrmName