1. 程式人生 > >機房收費系統之學生上機檢視狀態(全部下機、選擇下機)

機房收費系統之學生上機檢視狀態(全部下機、選擇下機)

         學生上機檢視狀態窗體中有兩個新的知識點,一個是MSHFlexGrid控制元件內資料的全部下機、選擇下機,一個是查詢中的組合查詢。今天的這篇部落格先對全部下機、選擇下機內容進行分享,全部下機和選擇下機的一個問題點在於全部下機、選擇下機中的每個對應使用者在Online_Info,Line_Info ,Student_Info 資料表中都有資料的修改與更新。

一、學生上機檢視狀態窗體流程圖

  其中全部下機和選擇下機的流程圖梳理如下:

二、程式碼片段

①全部下機(通過do while ...loop迴圈對所有上機人員進行下機操作,並逐個更改對應資料表中的消費金額、餘額等資料)

Private Sub alldown_Click()
    Dim omrc As ADODB.Recordset
    Dim otxtSQL As String
    Dim oMsgText As String
    Dim smrc As ADODB.Recordset
    Dim stxtSQL As String
    Dim sMsgText As String
    Dim consume As Integer
    Dim consumetime As String
    Dim deleotxtSQL As String
    Dim deleoMsgText As String
    Dim deleomrc As ADODB.Recordset
    Dim updatestxtSQL As String
    Dim updatesMsgText As String
    Dim updatesmrc As ADODB.Recordset
    Dim lmrc As ADODB.Recordset
    Dim ltxtSQL As String
    Dim lMsgText As String
    Dim StrCPN As String * 10
    Dim i As String
    Dim n As Integer
    
    GetComputerName StrCPN, 10
    
     'myflexgrid內資料迴圈刪除
    Do While Not myflexgrid.Rows = 1
    
    otxtSQL = "select * from Online_Info where cardno='" & myflexgrid.TextMatrix(1, 0) & "'"
    Set omrc = ExecuteSQL(otxtSQL, oMsgText)
    
    stxtSQL = "select * from student_Info where cardno='" & myflexgrid.TextMatrix(1, 0) & "'"
    Set smrc = ExecuteSQL(stxtSQL, sMsgText)
    

    consumetime = DateDiff("n", omrc.Fields(7), Time)    '計算消費時長
        
    If Trim(smrc.Fields(1)) = "固定使用者" Then            '根據使用者型別計算出消費金額
        consume = consumetime / 2                   '固定使用者除以2元每分鐘
    Else
        consume = consumetime / 3                   '臨時使用者除以3元每分鐘
    End If
    
    
    '更新student_Info 資料,使用者餘額更新
    i = Trim(smrc.Fields(7)) - consume
    updatestxtSQL = "update student_Info set cash=" & i & " where cardno='" & myflexgrid.TextMatrix(1, 0) & "'"
    Set updatesmrc = ExecuteSQL(updatestxtSQL, updatesMsgText)
    
    '更新line_Info資料,新增下機記錄
    ltxtSQL = "select * from Line_Info "
    Set lmrc = ExecuteSQL(ltxtSQL, lMsgText)
    
    lmrc.AddNew
        lmrc.Fields(1) = Trim(myflexgrid.TextMatrix(1, 0))
        lmrc.Fields(2) = Trim(smrc.Fields(1))
        lmrc.Fields(3) = Trim(smrc.Fields(2))
        lmrc.Fields(4) = Trim(smrc.Fields(4))
        lmrc.Fields(5) = Trim(smrc.Fields(3))
        lmrc.Fields(6) = Trim(omrc.Fields(6))
        lmrc.Fields(7) = Trim(omrc.Fields(7))
        lmrc.Fields(8) = Format(Now(), "yyyy-MM-dd")
        lmrc.Fields(9) = Format(Now(), "HH:mm:ss")
        lmrc.Fields(10) = consumetime
        lmrc.Fields(11) = consume
        lmrc.Fields(12) = i
        lmrc.Fields(13) = "正常下機"
        lmrc.Fields(14) = Trim(StrCPN)
    lmrc.Update
    
    '更新online_Info資料,刪除上機資料
    deleotxtSQL = "delete from Online_Info where cardno='" & myflexgrid.TextMatrix(1, 0) & "'"
    Set deleomrc = ExecuteSQL(deleotxtSQL, deleoMsgText)
    
    myflexgrid.RemoveItem 1    '刪除myflexgrid本行資料
    
    Loop
    
    omrc.Close            '釋放omrc記錄集
    smrc.Close            '釋放smrc記錄集
    lmrc.Close            '釋放lmrc記錄集
    
    
End Sub

②、選擇下機(通過for 迴圈來檢索有標識“√”的行,對其進行下機操作並更改對應資料表資料) ,以下程式碼為流程圖中判斷標記部分的程式碼,對資料的增刪改查與全部下機相同就不再贅述。

 m = myflexgrid.Rows - 1                          '定義m變數為檢索次數
 For a = 1 To m                                   '迴圈次數
    If myflexgrid.TextMatrix(m, 5) = "√" Then     '檢索有√標識的行
        ......(與全部下機相同,只是查詢、刪除、更新語句中的myflexgrid.text(1,0)中的“1”改為變數"m")
        m = m - 1
    Else
        m = m - 1
    End If
    
 Next

以上程式碼是不是有些複雜,哪位大神有簡單的方法還望多多指教哈^_^

下一站組合查詢走起^_^