' ' 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