Post Method, Step8 (Visual Basic)
Public Function Post(ByVal lngAccountNo As Long, _
ByVal lngAmount As Long) As String
Dim strResult As String
On Error GoTo ErrorHandler
' check for security
If (lngAmount > 500 Or lngAmount < -500) Then
If Not GetObjectContext.IsCallerInRole("Managers") Then
Err.Raise Number:=APP_ERROR, _
Description:="Need 'Managers' role for amounts over $500"
End If
End If
' obtain the ADO environment and connection
Dim adoConn As New ADODB.Connection
Dim varRows As Variant
adoConn.Open strConnect
On Error GoTo ErrorCreateTable
' update the balance
Dim strSQL As String
strSQL = "UPDATE Account SET Balance = Balance + "_
+ Str$(lngAmount) + " WHERE AccountNo = "
+ Str$(lngAccountNo)
TryAgain:
adoConn.Execute strSQL, varRows
' if anything else happens
On Error GoTo ErrorHandler
' get resulting balance which may have been
' further updated via triggers
strSQL = "SELECT Balance FROM Account " _
+ "WHERE AccountNo = " + Str$(lngAccountNo)
Dim adoRS As ADODB.Recordset
Set adoRS = adoConn.Execute(strSQL)
If adoRS.EOF Then
Err.Raise Number:=APP_ERROR, _
Description:="Error. Account " _
+ Str$(lngAccountNo) + " not on file."
End If
Dim lngBalance As Long
lngBalance = adoRS.Fields("Balance").Value
' check if account is overdrawn
If (lngBalance) < 0 Then
Err.Raise Number:=APP_ERROR, _
Description:="Error. Account " _
+ Str$(lngAccountNo) _
+ " would be overdrawn by " _
+ Str$(lngBalance) + ". Balance is still "
+ Str$(lngBalance - lngAmount) + "."
Else
If lngAmount < 0 Then
strResult = strResult _
& "Debit from account "
& lngAccountNo & ", "
Else
strResult = strResult _
& "Credit to account "
& lngAccountNo & ", "
End If
strResult = strResult + "balance is $"
& Str$(lngBalance) & ". (VB)"
End If
' cleanup
Set adoRS = Nothing
Set adoConn = Nothing
' we are finished and happy
GetObjectContext.SetComplete
Post = strResult
Exit Function
ErrorCreateTable:
On Error GoTo ErrorHandler
' create the account table
Dim objCreateTable As CreateTable
Set objCreateTable = _
GetObjectContext.CreateInstance("Bank.CreateTable")
objCreateTable.CreateAccount
GoTo TryAgain
ErrorHandler:
' cleanup
If Not adoRS Is Nothing Then
Set adoRS = Nothing
End If
If Not adoConn Is Nothing Then
Set adoConn = Nothing
End If
GetObjectContext.SetAbort ' we are unhappy
Post = "" ' indicate that an error occurred
Err.Raise Err.Number, "Bank.Accout.Post", _
Err.Description
End Function