'
' Notes:
' The real challenge is error handling. Only the simplest is done here.
' The database is defined to prevent duplicate student & class names
' The database is defined to enforce relational integrity
'
Sub DoPost()
Dim buf As String
Dim buf2 As String
On Error GoTo OnPostError ' We need to handle errors here
Select Case sSelector
Case "ENROLL": ' Enroll a student
buf = GetSmallField("Name")
Set ds = db!Students.OpenRecordset(dbOpenTable)
ds.AddNew
ds("Name") = buf
ds("Major") = GetSmallField("Major")
ds.Update
ds.Close ' ** THIS IS EASY TO FORGET! **
Send ("
" & buf & " enrolled successfully
")
Case "DISMISS": ' Dismiss a student
buf = GetSmallField("Student")
Set qd = db.QueryDefs!DismissStudent
qd.Parameters!pName = buf
qd.Execute
qd.Close
Send ("" & buf & " dismissed successfully
")
Case "ADD":
buf = GetSmallField("ClassName")
Set ds = db!Classes.OpenRecordset(dbOpenDynaset)
ds.AddNew
ds("ClassName") = buf
ds("Instructor") = GetSmallField("Instructor")
ds.Update
ds.Close
Send ("" & buf & " added successfully
")
Case "DEL":
buf = GetSmallField("Class")
Set qd = db.QueryDefs!DeleteClass
qd.Parameters!pClass = buf
qd.Execute
qd.Close
Send ("" & buf & " deleted successfully
")
Case "CL4ST":
buf = GetSmallField("Student")
Send ("Classes for " & buf & ":
")
Set qd = db.QueryDefs!ClassesForStudent
qd.Parameters!pName = buf
Set ds = qd.OpenRecordset(dbOpenDynaset)
Do Until ds.EOF
Send (ds("ClassName") & " (" & ds("Instructor") & ")
")
ds.MoveNext
Loop
ds.Close
qd.Close
Case "ST4CL"
buf = GetSmallField("Class")
Send ("Students in " & buf & ":
")
Set qd = db.QueryDefs!StudentsInClass
qd.Parameters!pClass = buf
Set ds = qd.OpenRecordset(dbOpenDynaset)
Do Until ds.EOF
Send (ds("Name") & " (" & ds("Major") & ")
")
ds.MoveNext
Loop
ds.Close
qd.Close
Case "TAKE":
buf = GetSmallField("Student")
buf2 = GetSmallField("Class")
Set qd = db.QueryDefs!TakeClass
qd.Parameters!pName = buf
qd.Parameters!pClass = buf2
qd.Execute
qd.Close
Send ("" & buf & " is now taking " & buf2 & "
")
Case "DROP":
buf = GetSmallField("Student")
buf2 = GetSmallField("Class")
Set qd = db.QueryDefs!DropClass
qd.Parameters!pName = buf
qd.Parameters!pClass = buf2
qd.Execute
qd.Close
Send ("" & buf & " has dropped " & buf2 & "
")
Case Else:
Send ("Unknown POST selector """ & sSelector & """
")
End Select
DoPostFinish: ' Can come here via error,
' State of ds & qd unknown
On Error Resume Next ' Make damn sure ds and qd are closed
ds.Close ' else db.Close will fail and you lose
qd.Close
Exit Sub
' =================
' Exception Handler
' =================
'
OnPostError:
If Err >= CGI_ERR_START Then Error Err ' Resignal if a CGI.BAS error
Send ("There was a problem:
")
Send ("VB reports: " & Error$ & " (error #" & Err & ")
Best Guess:")
Select Case sSelector
Case "ENROLL": ' Probably a duplicate name (enforced by database)
Send ("Already enrolled")
Case "DISMISS": ' This is ugly, name came from dropbox
Send ("?? This is ugly ??")
Case "ADD":
Send ("Class already exists")
Case "DEL":
Send ("?? This is ugly ??")
Case "CL4ST":
Send ("?? This is ugly ??")
Case "ST4CL"
Send ("?? This is ugly ??")
Case "TAKE":
Send ("Already taking this class")
Case "DROP":
Send ("Not in this class")
Case Else:
Send ("Programmer error: Unknown selector in POST exception handler.")
End Select
Send ("
")
Resume DoPostFinish
End Sub