前言:
组合查询是机房的另一个重点;涉及到的窗体有:学生基本信息维护、学生上机信息统计、操作员工作记录。
逻辑:
问题及重点代码:
1.调用函数的目的是使得汉字与表中字段进行转化
例:sql语句的姓名应该是student Name,而代码中添加的是文字(Combo3.AddItem “姓名”)通过函数可以将两者进行转化
2.表中信息清空:
通过加入MSHFlexGrid1.Clear可以清空
3.实时错误”3021”的四种情况:
(出现这种错误就可以按照这四种情况一一进行排除)
1).查找的数据库记录为空..可以用 rs.RecordCount 来判断数据是否等于0
2).查找到数据后,用 Del 命令删除记录后,再引用 Fields 后会出现错误.
3).已经用MoveFirst 或用 MovePrevious 命令 移动至数据库开始后再用 MovePrevious 命令.
4).已经用MoveLast 或用 MoveNext 命令 移动至数据库开始后再用 MoveNext 命令.
感觉前两种比较常见,通过添加如下代码可以解决:
If mrc.EOF Then
MsgBox "查询不到内容!"
Exit Sub
End If
4.错误”94” 为Null
在出错的地方加入 & ” “就可以解决;意思是或者为空值。
定义的函数代码如下:
Public Function field(i As String) As String
Select Case i
Case "卡号"
field = "cardno"
...
Case "余额"
field = "recharge"
Case "或"
field = "or"
Case "与"
field = "and"
End Select
End Function
If Trim(Combo1.Text) = "" Or Trim(Combo2.Text) = "" Or Trim(Text1.Text) = "" Then
MsgBox "请将第一行内容填写完整!", vbOKOnly, "提示"
Exit Sub
Else
txtSQL = txtSQL & " " & field(Combo1.Text) & Combo2.Text & "'" & Trim(Text1.Text) & "'"
If Combo7.Text <> "" Then '判断第一个组合关系是否选中
If Combo3.Text = "" Or Combo4.Text = "" Or Text2.Text = "" Then
MsgBox "请将第二行内容填写完整!", vbOKOnly, "提示"
Exit Sub
Else
txtSQL = txtSQL & "" & field(Combo7.Text) & " " & field(Combo3.Text) & Combo4.Text & "'" & Text2.Text & "'"
If Combo8.Text <> "" Then
If Combo5.Text = "" Or Combo6.Text = "" Or Text3.Text = "" Then
MsgBox "请将第三行内容填写完整!", vbOKOnly, "提示"
Exit Sub
Else
txtSQL = txtSQL & "" & field(Combo8.Text) & " " & field(Combo5.Text) & Combo6.Text & "'" & Text3.Text & "'"
'将前三行的条件联系起来
End If
End If
End If
End If
End If
txtSQL = "select * from line_Info" & " where" & txtSQL
Set mrc = ExecuteSQL(txtSQL, MsgText)
If mrc.EOF Then
MsgBox "查询不到内容!"
Exit Sub
End If
'将查询内容显示在表格控件中
With MSHFlexGrid
.Rows = 2 '2行
.CellAlignment = 4
.TextMatrix(0, 0) = "卡号"
.TextMatrix(0, 1) = "姓名"
.TextMatrix(0, 2) = "上机日期"
.TextMatrix(0, 3) = "上机时间"
.TextMatrix(0, 4) = "下机日期"
.TextMatrix(0, 5) = "下机时间"
.TextMatrix(0, 6) = "消费金额"
.TextMatrix(0, 7) = "余额"
'判断是否移动到数据集对象的最后一条记录
Do While Not mrc.EOF
.Rows = .Rows + 1
.CellAlignment = 4
.TextMatrix(.Rows - 2, 0) = mrc.Fields(0)
.TextMatrix(.Rows - 2, 1) = mrc.Fields(2)
.TextMatrix(.Rows - 2, 2) = mrc.Fields(5)
.TextMatrix(.Rows - 2, 3) = mrc.Fields(6)
.TextMatrix(.Rows - 2, 4) = mrc.Fields(7)
.TextMatrix(.Rows - 2, 5) = mrc.Fields(8)
.TextMatrix(.Rows - 2, 6) = mrc.Fields(10) & " "
.TextMatrix(.Rows - 2, 7) = mrc.Fields(11)
'移动到下一条记录
mrc.MoveNext
Loop
End With
mrc.Close
总结:
个人觉得组合查询就是一条SQL语句。
txtSQL = “select * from line_Info” & ” where” & txtSQL
txtSQL = txtSQL & ” ” & field(Combo1.Text) & Combo2.Text & “’” & Trim(Text1.Text) & “’”
比如:通过第一行查询姓名为1的所有信息。
field(Combo1.Text)就是姓名(SQL语句中汉字无法识别,通过函数转化为student_Name),Combo2.Text就是”=”,Trim(Text1.Text)就是1