機房收費系統之學生上機檢視狀態(全部下機、選擇下機)
阿新 • • 發佈:2019-02-02
學生上機檢視狀態窗體中有兩個新的知識點,一個是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