1. 程式人生 > >機房收費系統之操作員記錄、正在值班人員記錄(關閉視窗判斷事件,MsgBox返回值,Queryunload與Unload區別)

機房收費系統之操作員記錄、正在值班人員記錄(關閉視窗判斷事件,MsgBox返回值,Queryunload與Unload區別)

      機房收費系統的操作員記錄與正在值班人員記錄的窗體比較簡單,思路也差不多,在這裡就彙總在一起進行總結。

一、流程圖

①操作員工作記錄窗體流程圖

②正在值班人員窗體流程圖

二、查詢集

①MsgBox的返回值有哪些,如何獲取返回值?

     msgbox函式有兩種格式,一種帶返回值,一種不帶返回值

     程式碼如下:

     MsgBox "提示內容" , , “提示框標題” ‘不帶返回值

     D=Msgbox (“提示內容”, , “提示內容”) ’D為返回值,可以知道使用者按下哪個按鈕

②VB窗體右上角的關閉判斷事件如何調出?

     有兩種啟用方式:

     Form_Unload 事件   和   Form_Queryunload事件

③Queryunload事件與Unload事件的區別

三、問題集

①unload事件中使用MsgBox 彈出的提示框,點選取消按鈕不僅彈出窗體退出原有介面也一起退出?

      這個問題著實讓我找了好久,先是從MsgBox的返回值考慮,然後又從MsgBox的型別開始考慮結果都不行,最後查到了是cancel值的問題,在Unload和Queryunload事件中的cancel預設值是0,而0是退出的意思,其他非零值則為關閉彈出窗體保持原有介面。

②Unload和Queryunload的×按鈕表面上是退出了,但實際程式並未退出?

      原因在於退出時的程式碼編寫的是unload me ,而這個程式碼所表示的只是退出本窗體,並非退出程式,結束程式的程式碼為end。如果我們忽略這個問題的話,會出現匯出的.exe檔案執行後無法最終關閉的情況,表面上程式關閉了,實則程式還在資源管理器的後臺執行,使用者只有登入資源管理器介面尋找到後臺的.exe檔案,點選結束才可最終結束執行的程式,這樣便會影響使用者的體驗度。

四、核心程式碼集

①登入窗體介面,點選確定登入按鈕後登入員的資訊隨之更新到OnWork_Info,worklog_Info資料表中

Private Sub cmdtrue_Click()

    logtxtSQL = "select * from worklog_Info"
    ontxtSQL = "select * from OnWork_Info"
    txtSQL = "select * from User_Info where userID= '" & txtuserID.Text & "'"
    
    Set logmrc = ExecuteSQL(logtxtSQL, logMsgText)
    Set onmrc = ExecuteSQL(ontxtSQL, onMsgText)
    Set mrc = ExecuteSQL(txtSQL, MsgText)
    
    onmrc.AddNew
    onmrc.Fields(0) = Trim(txtuserID.Text)
    onmrc.Fields(1) = Trim(mrc.Fields(2))
    onmrc.Fields(2) = Format(Now(), "yyyy-MM-dd")
    onmrc.Fields(3) = Format(Now(), "HH:mm:ss")
    onmrc.Fields(4) = Trim(StrCPN)
    onmrc.Update
    
    logmrc.AddNew
    logmrc.Fields(1) = Trim(txtuserID.Text)
    logmrc.Fields(2) = Trim(mrc.Fields(2))
    logmrc.Fields(3) = Format(Now(), "yyyy-MM-dd")
    logmrc.Fields(4) = Format(Now(), "HH:mm:ss")
    logmrc.Fields(7) = Trim(StrCPN)
    logmrc.Fields(8) = "true"
    logmrc.Update

end sub

②點選退出窗體時,首先判斷是否退出,若確定退出則更新OnWork_Info,worklog_Info資料表相應內容

Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)

    Dim mrc As ADODB.Recordset
    Dim txtSQL As String
    Dim MsgText As String
    Dim logmrc As ADODB.Recordset
    Dim logtxtSQL As String
    Dim logMsgText As String
    Dim x                                                 '定義MsgBox返回值變數
    x = MsgBox("確定要關閉麼?", vbOKCancel, "溫馨提示:")
    If x = vbOK Then                                      '如果返回值為VBOK

        txtSQL = "delete from OnWork_Info"                '刪除正在工作人員OnWork_Info的資料
        Set mrc = ExecuteSQL(txtSQL, MsgText)

        '將登出的時間更新是worklog_Info的資料表中
        logtxtSQL = "update worklog_Info set LogoutDate='" & Format(Now(), "yyyy-MM-dd") & "' ,LogoutTime='" & Format(Now(), "HH:mm:ss") & "' ,status='" & False & "' where UserID='" & frmlogin.txtuserID.Text & "'"
        Set logmrc = ExecuteSQL(logtxtSQL, logMsgText)

        Cancel = 0                                        'cancel值為零,退出窗體
        Unload Me                                         '退出本窗體
        End                                               '退出程式

    End If
 
    If x = vbCancel Then                                 '如果按下vbcancel按鈕
        Cancel = 1                                       'cancel值為非零,僅關閉彈出窗體
    End If
End Sub

以上便是與工作員有關的窗體程式碼梳理部分,下一站日結賬窗體走起^_^