机房收费-组合查询
2015-07-26 20:04
169 查看
在机房收费系统中,其中的组合查询仅仅在刚开始的时候构思了一点自己的想
法,但是并没用付诸于行动,去尝试自己的是否正确,而是选择了去看之前看
到的一篇关于组合查询的博客,说起来有些愧疚的啊。还好的是当我理清思路
之后剩下的组合查询都是自己的写的了。
在这分享一下自己的思路,共分为三步。(以学生基本信息维护为例)
1.首先窗体的建立,加入需要控件等来补充界面。
2.当运行之时需要添加信息,也就是供用户选择的消息。
当我刚开始的时候想到组合查询感觉是很复杂的,但是当理清楚其中的思路之
后就感觉简单了很多。希望大家能够从此得到一些收获。
法,但是并没用付诸于行动,去尝试自己的是否正确,而是选择了去看之前看
到的一篇关于组合查询的博客,说起来有些愧疚的啊。还好的是当我理清思路
之后剩下的组合查询都是自己的写的了。
在这分享一下自己的思路,共分为三步。(以学生基本信息维护为例)
1.首先窗体的建立,加入需要控件等来补充界面。
2.当运行之时需要添加信息,也就是供用户选择的消息。
[code]Dim a, b, c '对于控件数组简单的添加方法!!! For a = 0 To 2 With Combo1(a) .AddItem "卡号" .AddItem "学号" .AddItem "姓名" .AddItem "性别" .AddItem "系别" .AddItem "年纪" .AddItem "班级" End With Next a For b = 0 To 2 With Combo2(b) .AddItem "=" .AddItem "<" .AddItem ">" .AddItem "<>" End With Next b For c = 0 To 1 With Combo3(c) .AddItem "与" .AddItem "或" End With Next c
[code]3.有了控件和消息之后就到了查询和显示了。 大家都知道一般的sql查询语句为 `txtsql='select * from student_info where status='使用' _ and username='" & txtuserno.text & "'"` 我们先来分析一下这个语句,其中前半句 前半句`txtsql='select * from student_info where` 无论放到哪,查什么的东西都是一样的。主要的是后面,后面内容主要分为四部分 1.字段名(status) 2.操作符(=) 3.要查询的内容,即限制条件('使用') 4.组合关系(and) 知道了这四部分,我们就可以简单的写出sql语句了。 (1)由于combo1中添加的信息为汉语,不能够在sql语句中直接使用 所以我首先定义了一个过程,来进行转换。
[code]Private Function tName(Englishname As String) As String '定义一个过程,进而在进行判断的时候,可以省略 Select Case Englishname Case "卡号" tName = "cardno" Case "学号" tName = "studentno" Case "姓名" tName = "studentname" Case "性别" tName = "sex" Case "系别" tName = "department" Case "年级" tName = "grade" Case "班级" tName = "class" End Select End Function
[code](2)接下来就是查询语句了。
[code]Private Sub cmdquery_Click() Dim a(组合关系) '我将每一行的查询都分开了,这样的话可以使整体上看上去更加简洁,规范。 '调错等也比较方便。除此之外,他们的txtsql可以继承上面的!放很多。 '第一行查询。。。。。。。。。。。。。。。。。。。。。 If Not texttxt(Combo1(0).Text) Then MsgBox "请输入第一行字段名", vbOKOnly + vbExclamation, "提示" Combo1(0).SetFocus Exit Sub ElseIf Not texttxt(Combo2(0).Text) Then MsgBox "请输入第一行操作符", vbOKOnly + vbExclamation, "提示" Combo2(0).SetFocus Exit Sub ElseIf Not texttxt(Text1(0).Text) Then MsgBox "请在第一行输入要查询的内容", vbOKOnly + vbExclamation, "提示" Text1(0).SetFocus Exit Sub Else txtsql = "select * from student_info where " & tName(Combo1(0).Text) & Combo2(0).Text & "'" & Text1(0).Text & "'" Set mrc = ExecuteSQl(txtsql, msgTxt) '其中字段名tName(Combo1(0).Text),操作符Combo2(0).Text, '查询的内容Text1(0).Text。 If mrc.EOF Then MsgBox "当前没有该内容", vbOKOnly + vbExclamation, "提示" Exit Sub Else If Combo3(0).Text = "" Then GoTo case1 End If End If End If '第二行。。。。。。。。。。。。。。。。。。。。。。。。。。。。。 Select Case Combo3(0) '判断与或者非,并记入a(组合关系) Case "与" a = "and" Case "或" a = "or" End Select If Not texttxt(Combo1(1).Text) Then MsgBox "请输入第二行字段名", vbOKOnly + vbExclamation, "提示" Combo1(1).SetFocus Exit Sub ElseIf Not texttxt(Combo2(1).Text) Then MsgBox "请输入第二行操作符", vbOKOnly + vbExclamation, "提示" Combo2(1).SetFocus Exit Sub ElseIf Not texttxt(Text1(1).Text) Then MsgBox "请在第二行输入要查询的内容", vbOKOnly + vbExclamation, "提示" Text1(1).SetFocus Exit Sub Else txtsql = txtsql & a & " " & tName(Combo1(1).Text) & Combo2(1).Text & "'" & Text1(1).Text & "'" Set mrc = ExecuteSQl(txtsql, msgTxt) '该语句的第二个txtsql是对于第一行txtsql的继承, '后面的分别为组合关系a,字段名tName(Combo1(1).Text), '操作符Combo2(1).Text,要查询的内容Text1(1).Text。 If mrc.EOF Then MsgBox "当前没有该内容", vbOKOnly + vbExclamation, "提示" Exit Sub Else If Combo3(1).Text = "" Then GoTo case1 End If End If End If '第三行。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。 Select Case Combo3(1) Case "与" a = "and" Case "或" a = "or" End Select If Not texttxt(Combo1(2).Text) Then MsgBox "请输入第三行字段名", vbOKOnly + vbExclamation, "提示" Combo1(2).SetFocus Exit Sub ElseIf Not texttxt(Combo2(2).Text) Then MsgBox "请输入第三行操作符", vbOKOnly + vbExclamation, "提示" Combo2(2).SetFocus Exit Sub ElseIf Not texttxt(Text1(2).Text) Then MsgBox "请在第三行输入要查询的内容", vbOKOnly + vbExclamation, "提示" Text1(2).SetFocus Exit Sub Else txtsql = txtsql & a & " " & tName(Combo1(2).Text) & Combo2(2).Text & "'" & Text1(2).Text & "'" Set mrc = ExecuteSQl(txtsql, msgTxt) '同上 If mrc.EOF Then MsgBox "当前没有该内容", vbOKOnly + vbExclamation, "提示" Exit Sub Else GoTo case1 End If End If ' (3)查询信息的展现(这里是运用了goto语句) case1: With myflexgrid .Rows = 1 .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) = "性别" .TextMatrix(0, 8) = "状态" .TextMatrix(0, 9) = "备注" .TextMatrix(0, 10) = "类型" .TextMatrix(0, 11) = "日期" .TextMatrix(0, 12) = "时间" Do While mrc.EOF = False .Rows = .Rows + 1 .CellAlignment = 4 .TextMatrix(.Rows - 1, 0) = mrc.Fields(1) .TextMatrix(.Rows - 1, 1) = mrc.Fields(2) .TextMatrix(.Rows - 1, 2) = mrc.Fields(0) .TextMatrix(.Rows - 1, 3) = mrc.Fields(7) .TextMatrix(.Rows - 1, 4) = mrc.Fields(4) .TextMatrix(.Rows - 1, 5) = mrc.Fields(5) .TextMatrix(.Rows - 1, 6) = mrc.Fields(6) .TextMatrix(.Rows - 1, 7) = mrc.Fields(3) .TextMatrix(.Rows - 1, 8) = mrc.Fields(10) .TextMatrix(.Rows - 1, 9) = mrc.Fields(8) .TextMatrix(.Rows - 1, 10) = mrc.Fields(14) .TextMatrix(.Rows - 1, 11) = mrc.Fields(12) .TextMatrix(.Rows - 1, 12) = mrc.Fields(13) mrc.MoveNext Loop End With End Sub
当我刚开始的时候想到组合查询感觉是很复杂的,但是当理清楚其中的思路之
后就感觉简单了很多。希望大家能够从此得到一些收获。
相关文章推荐
- 移植u-boot.2012.04.01
- 正整数
- HDU4287 字典树
- 找出java代码中占用cpu过多问题
- UVA 401
- Automatic Editing
- CSS元素分类
- LightOJ 1141 Program E
- UVA 10474 Where is the Marble?
- 由Handler引发的内存泄漏的思考
- 【Prism】MEF版UIComposition
- HDU 3973 AC's String 字符串哈希
- iostream
- sift是图像匹配的非常经典的算法
- DFS-POJ-1321-棋盘问题
- 【BMI指数计算器V2.0】项目实战
- GestureOverlayView(手势识别2)
- shape layer-list selector使用
- Watch The Movie(严格限制数量的二维费用背包)
- 在空白处填充程序3