分享

VBA-数据库查询实例

 hdzgx 2019-12-06

1.首先我们得做一个窗体,其布局和运行效果如下

2.我们要理清思路,首先窗体在运行时就应该将部门加载进去,并且将重复的部门剔除掉

  1. Private Sub UserForm_Initialize()
  2. Set con = New ADODB.Connection
  3. With con
  4. .Provider = "microsoft.ace.oledb.12.0"
  5. .ConnectionString = "data source=" & ThisWorkbook.Path & "\学生管理.accdb"
  6. .Open
  7. End With
  8. '提取
  9. Dim sql As String
  10. sql = "select distinct 部门 from 员工"
  11. Set rs = New ADODB.Recordset
  12. rs.Open sql, con, adOpenKeyset, adLockOptimistic '产生记录集
  13. Dim i As Integer
  14. '将记录集中的部门名称显示到listbox1 列表框中
  15. With ListBox1
  16. .Clear
  17. For i = 1 To rs.RecordCount
  18. .AddItem rs("部门")
  19. rs.MoveNext '将记录集中的指针指向下一条记录
  20. Next i
  21. End With
  22. rs.Close
  23. End Sub

3.我们要实现的是在选择部门中选择部门后,将这个部门的员工编号,姓名显示在选择员工的列表框中

  1. '单击列表框,查询员工信息
  2. Private Sub ListBox1_Click()
  3. Dim sql As String
  4. sql = "select 编号,姓名 from 员工 where 部门='" & ListBox1.Value & " 'order by 编号"
  5. rs.Open sql, con, adOpenKeyset, adLockOptimistic '产生记录集
  6. Dim i As Integer
  7. With ListBox2
  8. .Clear
  9. For i = 1 To rs.RecordCount
  10. .AddItem rs("编号") & Space(2) & rs("姓名")
  11. rs.MoveNext '将记录集中的指针指向下一条记录
  12. Next i
  13. End With
  14. rs.Close
  15. End Sub

 4.将选择员工后,把员工的对应信息显示在对应的文本框中,便可以实现查询功能

  1. '单击列表框,将对应的信息显示在对应的文本框中
  2. Private Sub ListBox2_Click()
  3. Dim sql As String
  4. sql = "select * from 员工 where 编号='" & Left(ListBox2.Value, 6) & "'"
  5. rs.Open sql, con, adOpenKeyset, adLockOptimistic
  6. Dim arr, i As Integer
  7. arr = Array("TextBox1", "TextBox2", "TextBox3", "TextBox4", "TextBox5", "TextBox6", "TextBox7", "TextBox8", "TextBox9", "TextBox10")
  8. For i = 0 To 7
  9. Me.Controls(arr(i)).Value = rs.Fields(i)
  10. Next i
  11. rs.Close
  12. End Sub

5.完整代码及解释如下

  1. Option Explicit
  2. Dim con As ADODB.Connection
  3. Dim rs As ADODB.Recordset
  4. '关闭数据库连接,关闭窗体,释放变量空间
  5. Private Sub CommandButton1_Click()
  6. con.Close
  7. Set rs = Nothing
  8. Set con = Nothing
  9. Unload Me
  10. End Sub
  11. '单击列表框,查询员工信息
  12. Private Sub ListBox1_Click()
  13. Dim sql As String
  14. sql = "select 编号,姓名 from 员工 where 部门='" & ListBox1.Value & " 'order by 编号"
  15. rs.Open sql, con, adOpenKeyset, adLockOptimistic '产生记录集
  16. Dim i As Integer
  17. With ListBox2
  18. .Clear
  19. For i = 1 To rs.RecordCount
  20. .AddItem rs("编号") & Space(2) & rs("姓名")
  21. rs.MoveNext '将记录集中的指针指向下一条记录
  22. Next i
  23. End With
  24. rs.Close
  25. End Sub
  26. '单击列表框,将对应的信息显示在对应的文本框中
  27. Private Sub ListBox2_Click()
  28. Dim sql As String
  29. sql = "select * from 员工 where 编号='" & Left(ListBox2.Value, 6) & "'"
  30. rs.Open sql, con, adOpenKeyset, adLockOptimistic
  31. Dim arr, i As Integer
  32. arr = Array("TextBox1", "TextBox2", "TextBox3", "TextBox4", "TextBox5", "TextBox6", "TextBox7", "TextBox8", "TextBox9", "TextBox10")
  33. For i = 0 To 7
  34. Me.Controls(arr(i)).Value = rs.Fields(i)
  35. Next i
  36. rs.Close
  37. End Sub
  38. Private Sub UserForm_Initialize()
  39. Set con = New ADODB.Connection
  40. With con
  41. .Provider = "microsoft.ace.oledb.12.0"
  42. .ConnectionString = "data source=" & ThisWorkbook.Path & "\学生管理.accdb"
  43. .Open
  44. End With
  45. '提取
  46. Dim sql As String
  47. sql = "select distinct 部门 from 员工"
  48. Set rs = New ADODB.Recordset
  49. rs.Open sql, con, adOpenKeyset, adLockOptimistic '产生记录集
  50. Dim i As Integer
  51. '将记录集中的部门名称显示到listbox1 列表框中
  52. With ListBox1
  53. .Clear
  54. For i = 1 To rs.RecordCount
  55. .AddItem rs("部门")
  56. rs.MoveNext '将记录集中的指针指向下一条记录
  57. Next i
  58. End With
  59. rs.Close
  60. End Sub

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多