机房收费系统——组合查询

前端之家收集整理的这篇文章主要介绍了机房收费系统——组合查询前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。


对于组合查询一开始接触感觉很难下手,其实在之前的学生中已经有涉及过了,只是过程和联系没有这么复杂,因为当时对组合查询的理解不过深入,所以到这里才不知道如何组合。

在做完整个组合查询之后,梳理思路如下:首先在combo的下拉列表中,由于涉及combo比较多依靠additem逐个添加,结果就是累死,所以For……next语句可以将一个combo循环N次,这也是机房当中可以优化的代码有很多,因为涉及到了很多可以重复循环的过程。

  1. For a = 0 To 2
  2. With Combo1(a)
  3. .AddItem "卡号"
  4. .AddItem "学号"
  5. .AddItem "姓名"
  6. .AddItem "性别"
  7. .AddItem "系别"
  8. .AddItem "年级"
  9. .AddItem "班级"
  10. End With
  11. Next a

之所以叫组合查询,就要考虑组合关系,一共有七种组合 1.不选择组合关系,只有第一行可用 2.combo0= 3.combo1= 4.选择combo30=+combo31= 5.combo30=+combo31= 6.combo30=+combo31= 7.combo30=+combo31=

下面以最复杂的两个组合全选,涉及三层关系为例:

  1. txtsql = "select * from student_info where " '从表中取出所需内容
  2.  
  3. If Not Trim(Combo3(1).Text) = "" Then '确保输入选项完整,第二个组合不为空
  4. ‘判断所有不为空
  5. If Trim(Combo1(0).Text) = "" Or Trim(Combo2(0).Text) = "" Or Trim(Text1(0).Text) = "" Or _
  6. Trim(Combo1(1).Text) = "" Or Trim(Combo2(1).Text) = "" Or Trim(Text1(1).Text) = "" _
  7. Or Trim(Combo1(2).Text) = "" Or Trim(Combo2(2).Text) = "" Or Trim(Text1(2).Text) = "" Then
  8. MsgBox "请把您的输入项填写完整",vbOKOnly + vbExclamation,"警告!"
  9. Exit Sub
  10. Else
  11.  
  12. '两个组合关系均为“与”时
  13. If Combo3(0).Text = "与" And Combo3(1).Text = "与" Then
  14. txtsql = txtsql & FileName(Combo1(0).Text) & " " & Trim(Combo2(0).Text) & _
  15. "'" & Trim(Text1(0).Text) & "'" & " " & "And" & " " & FileName(Combo1(1).Text) _
  16. & " " & Trim(Combo2(1).Text) & "'" & Text1(1).Text & "'" & " " & "And" _
  17. & " " & FileName(Combo1(2).Text) & " " & Trim(Combo2(2).Text) & "'" & Trim(Text1(2).Text) & "'"
  18. Set mrc = Executesql(txtsql,msgtext)
  19.  
  20. If mrc.EOF = True Then '数据库中无记录时
  21. MsgBox "无此记录","警告!"
  22. Combo1(2).SetFocus
  23. Text1(2).Text = ""
  24. Text1(1).Text = ""
  25. Text1(0).Text = ""
  26. mygrid1.Clear
  27. Exit Sub
  28. Else
  29. Call public
  30. End If
  31. End If
  32.  
  33.  
  34. '第一个组合关系为“与”,第二个组合关系为“或”
  35.  
  36. If Combo3(0).Text = "与" And Combo3(1).Text = "或" Then
  37. txtsql = txtsql & FileName(Combo1(0).Text) & " " & Trim(Combo2(0).Text) & "'" & _
  38. Trim(Text1(0).Text) & "'" & " " & "And" & " " & FileName(Combo1(1).Text) & _
  39. " " & Trim$(Combo2(1).Text) & "'" & Text1(1).Text & "'" & " " & "or" & " " & _
  40. FileName(Combo1(2).Text) & " " & Trim(Combo2(2).Text) & "'" & Trim(Text1(2).Text) & "'"
  41. Set mrc = Executesql(txtsql,msgtext)
  42.  
  43. If mrc.EOF = True Then '数据库中无记录时
  44. MsgBox "无此记录","警告!"
  45. Combo1(2).SetFocus
  46. Text1(2).Text = ""
  47. Text1(1).Text = ""
  48. Text1(0).Text = ""
  49. mygrid1.Clear
  50. Exit Sub
  51. Else
  52. Call public
  53. End If
  54. End If
  55.  
  56.  
  57. '第一个组合关系为“或”,第二个组合关系为“与”
  58.  
  59.  
  60. If Combo3(0).Text = "或" And Combo3(1).Text = "与" Then
  61. txtsql = txtsql & FileName(Combo1(0).Text) & " " & Trim$(Combo2(0).Text) & "'" _
  62. & Trim(Text1(0).Text) & "'" & " " & "or" & " " & FileName(Combo1(1).Text) _
  63. & " " & Trim(Combo2(1).Text) & "'" & Text1(1).Text & "'" & " " & "and" & " " _
  64. & FileName(Combo1(2).Text) & " " & Trim(Combo2(2).Text) & "'" & Trim(Text1(2).Text) & "'"
  65. Set mrc = Executesql(txtsql,"警告!"
  66. Combo1(2).SetFocus
  67. Text1(2).Text = ""
  68. Text1(1).Text = ""
  69. Text1(0).Text = ""
  70. mygrid1.Clear
  71. Exit Sub
  72. Else
  73. Call public
  74. End If
  75. End If
  76.  
  77. '第一个组合关系为“或”,第二个组合关系为“或”
  78. If Combo3(0).Text = "或" And Combo3(1).Text = "或" Then
  79. txtsql = txtsql & FileName(Combo1(0).Text) & " " & Trim(Combo2(0).Text) & "'" _
  80. & Trim(Text1(0).Text) & "'" & " " & "or" & " " & FileName(Combo1(1).Text) _
  81. & " " & Trim(Combo2(1).Text) & "'" & Text1(1).Text & "'" & " " & "or" & " " _
  82. & FileName(Combo1(2).Text) & " " & Trim(Combo2(2).Text) & "'" & Trim(Text1(2).Text) & "'"
  83. Set mrc = Executesql(txtsql,msgtext)
  84.  
  85. If mrc.EOF Then '数据库中无记录时
  86. MsgBox "无此记录","警告!"
  87. Combo1(2).SetFocus
  88. Text1(2).Text = ""
  89. Text1(1).Text = ""
  90. Text1(0).Text = ""
  91. mygrid1.Clear
  92. Exit Sub
  93. Else
  94. Call public
  95. End If
  96. End If
  97.  
  98. Set mrc = Nothing '释放记录集
  99. End If
  100. End If
  101. 注:call public 由于每一种组合可能性都需要在mshflexgrid显示,所以定义了一个公用函数,每次都重复调用即可。

  1. 查询数据库中,将combo下拉列表的字段名转换成数据库中的字段
  2. Private Function FileName(strFileName As String) As String
  3. Select Case strFileName
  4. Case "卡号"
  5. FileName = "cardno"
  6. Case "学号"
  7. FileName = "studentno"
  8. Case "姓名"
  9. FileName = "studentname"
  10. Case "性别"
  11. FileName = "sex"
  12. Case "系别"
  13. FileName = "department"
  14. Case "年级"
  15. FileName = "grade"
  16. Case "班级"
  17. FileName = "class"
  18. End Select
  19. End Function

总结:1、组合查询自己做还是很吃力的,所以一开始没有头绪。我也是参考了师哥师姐的博客,但是在参考完之后一定要回过头来重新思考这样才能变成自己脑子的东西,这才是站在巨人肩膀上,相反不是单纯为了实现功能功能实现就过了,这是没有意思的。2、对一些功能的领悟够比如这个窗体当中有一个修改功能,一开始以为只是完全的靠自己修改,后来才知道他的作用是通过选中mshflexgrid中的一行在修改界面显示这一行的数据,然后修改这一行并更新到数据库3代码书写的不够规范。没有明显的分行和注释,对一段代码的分行可以看出你对代码的理解程度,另外注释是必不可少的,现在由于整体的代码量很少不注释似乎没有什么影响,但是将来的编程过程中大量的代码不容易一眼找到你要修改的地方或者合作完成的程序如何让别人明白你编写部分的意思,这就是注释的作用。另外大家都会出现mshflexgrid中的单元格显示不完整数据的情况,一开始我也是以为控件属性或者居中显示的原因,后来发现是代码书写不规范,trim去空格不能少,这样规范书写组合查询就完成了。

猜你在找的VB相关文章