上机状态查询分两个窗体:查询和操作。
功能:查询窗体跟前面讲的查询窗体一样是一个对字段不同条件的查询(针对对象是正在上机的卡信息);操作主要是对于正在上机的卡号进行强制下机(可让其全部下机,也可让某些人下机)。
步骤:
操作窗体:
1,显示全部正在上机的卡号信息(若想选择性的显示,可进入上机状态查询窗体),这个功能很好实现(直接查找一下上机记录表中“上机状态”的卡号信息即可)。
2,最大的难点是强制下机。我是先写的让选中的卡号下机,然后所有卡号下机是通过调用它来实现的(即选中所有的卡号下机)。
接下来就是选中卡号的操作:在这里我走了弯路,我是让其每次只能选中一行数据,这样使得操作反而变得很麻烦,不过在这里跟大家分享一下只能选中一行数据的方法吧:
Dim CurrentRow As Long
'选中一条记录
Private Sub MyFlexGrid_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
With MyFlexGrid
.Row = .RowSel
CurrentRow = .Row
.Col = 0
End With
End Sub'只选中一行记录
Private Sub MyFlexGrid_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
With MyFlexGrid
If CurrentRow > 0 Then
.RowSel = CurrentRow
.ColSel = .Cols - 1
End If
End With
End Sub
这种方法删除的时候直接用MyFlexGrid.RemoveItem CurrentRow即可删除显示的行(但是数据表中的该卡号记录还得通过查询该卡号信息然后删除)。
另外再跟大家分享一下可选中并删除不连续的多行数据方法:
Private Sub HFlexgrid_MouseDown(Button As Integer, Shift As Integer, X As Single, y As Single)
Dim i_Col As Integer
'单击选择或不选择
With HFlexgrid
If .Rows < 2 Then Exit Sub
If .Row < 1 Or .Row > .Rows - 1 Then Exit Sub
If .TextMatrix(.Row, 0) = "√" Then
.TextMatrix(.Row, 0) = ""
'改变行颜色(变为没选中之前的)
For i_Col = 0 To .Cols - 1
.Col = i_Col
.CellBackColor = vbWhite
Next i_Col
Else
.TextMatrix(.Row, 0) = "√"
'改变行颜色(选中后的颜色)
For i_Col = 0 To .Cols - 1
.Col = i_Col
.CellBackColor = vbRed
Next i_Col
End If
End With
End Sub
'删除选中得不连续的行
Private Sub cmdDelete_Click()
Dim i As Integer
i = 0
Do
If i >= HFlexgrid.Rows Then Exit Do
If HFlexgrid.TextMatrix(i, 0) = "√" Then
HFlexgrid.RemoveItem i
Else
i = i + 1
End If
Loop
End Sub
3,接下来的难点就是修改选中的卡号的数据表中的信息。这跟主窗体中的代码很像,就是将这些卡号的信息修改成下机后的状态(要修改下机日期和时间,余额,消费时间,消费金额),然后更新最新余额表。
'将选中的上机状态设为下机
strSQL = "select * from OnKeys where Cardno='" & Trim(MyFlexGrid.TextMatrix(CurrentRow, 0)) & "' and State='上机状态'"
Set mrs = ExecuteSQL(strSQL, MsgString)'具体的修改操作(同主窗体)
查询窗体跟其他的条件查询窗体一样。