Excel VBA编程 典型实例——读取ACCESS数据
利用VBA,不仅可以对文本文件进行操作,还可以对Office其他组件进行操作。例如,通过ADO读取ACCESS中的数据,这样使得Excel更加灵活。
1.练习要点
●使用ADO连接
●查询数据库数据
2.操作步骤
(1)启动Excel 2007,并打开VBE窗口,新建一个用户窗体,设置其Caption为“人员信息查询”。
(2)在该窗体中,添加一个多页控件,设置其中一个页为“查”,并在该页中添加如图18-8所示的控件。
图18-8 添加控件
(3)设置另一个页为“资料”,并添加如图18-9所示的控件。
图18-9 设置“资料”页
(4)在页控件下面添加一个命令按钮,并设置其Caption属性为“关闭”,如图18-10所示。
图18-10 添加按钮
(5)打开该窗体的【代码】窗口,在窗体的Initialize事件代码。
'声明ADO连接对象
Dim cnn As ADODB.Connection
'声明ADO命令对象
Dim cmd As ADODB.Command
Private Sub UserForm_Initialize()
Dim strCon As String
'为复合框添加数据
cbxFind.AddItem "身份证号码"
cbxFind.AddItem "姓名"
cbxFind.AddItem "出生日期"
cbxFind.AddItem "单位名称"
cbxFind.ListIndex = 0
'设置列表框为3列
lstInfo.ColumnCount = 3
'设置列表框各列的宽度
lstInfo.ColumnWidths = "20;100;60"
'新建连接对象
Set cnn = New ADODB.Connection
'定义连接字符串
strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _
ThisWorkbook.Path & "\数据库.mdb"
'设置连接参数
cnn.ConnectionString = strCon
'新建命令对象
Set cmd = New ADODB.Command
'打开“查”页
Me.MultiPage1.SelectedItem.Index = 0
End Sub
(6)设置“查”按钮的Click事件。
Private Sub cmdFind_Click()
'声明保存SQL语句
Dim strSql As String
Dim rs As ADODB.Recordset
'说明数组
Dim aRs(100, 3) As String
Dim i As Integervba数据库编程
If txtKey.Value = "" Then
MsgBox "请输入查询关键字"
txtKey.SetFocus
Exit Sub
End If
'根据不同字段生成查询
Select Case cbxFind.Value
Case "身份证号码"
strSql = "Select * From 人员信息 Where Identifcard_id Like '%" & txtKey.Value & "%'"
Case "姓名"
strSql = "Select * From 人员信息 Where Member_Name Like '%" & txtKey.Value & "%'"
Case "出生日期"
'判断日期格式是否正确
If IsDate(txtKey.Value) Then
strSql = "Select * From 人员信息 Where Birthday=#" & txtKey.Value & "#"
Else
MsgBox "请输入正确的日期格式!"
txtKey.SetFocus
Exit Sub
End If
Case "单位名称"
strSql = "Select a.Identifcard_id,a.Member_Name,b.unit_name " & _
" From 人员信息 AS a, 工作单位 AS b " & _
" Where a.unit_id=b.unit_id AND b.unit_name Like '%" & txtKey.Value & "%'"
End Select
'打开ADO连接
cnn.Open
'设置命令对象的连接属性
cmd.ActiveConnection = cnn
'设置命令对象执行的SQL语句
cmd.CommandText = strSql
'执行SQL语句,将结果保存在记录集中
Set rs = cmd.Execute()
i = 0
'循环处理记录集
Do While Not rs.EOF
aRs(i, 0) = rs.Fields("ID").Value
aRs(i, 1) = rs.Fields("Identifcard_id").Value
aRs(i, 2) = rs.Fields("Member_Name").Value
i = i + 1
rs.MoveNext
Loop
'清除列表框中的数据
lstInfo.Clear
'列表框赋值
lstInfo.List() = aRs
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论