一次解析文件2行-英雄云拓展知识分享
151
2023-11-07
【摘要】 本书摘自《Excel VBA+SQL数据管理与应用模板开发》一书中第3章,第2节,韩小良著。
3.2.2 利用 DISTINCT 查询不重复记录
在一个数据表中,某些字段的记录数据可以是重复的,例如,数据表“销售记录”中记 录的是各个客户在不同日期的销售记录流水账,假如要提取不重复的客户名称,以便将这样 的客户名称用作他用(例如,设置动态的有效性,设置复合框和列表框的项目),那么就可 以使用 DISTINCT 属性词消除重复记录。此时, SQL 语句如下:
Select DISTINCT字段 FROM 数据表
案例3-2
下面的例子是在打开窗体时,自动从当前工作簿的工作表“合同信息”中提取不重复的 供货商名称,并赋值给列表框ListBox1, 窗体结构如图3-2所示
'定义窗体模块级变量
Dim cnn As New ADODB.Connection
'初始化窗体
Private Sub UserForm_Initialize)
Dim rs As New ADODB.Recordset
Dim SQL As String
'建立与工作簿的连接
With cnn
.Provider ="microsoft.ace.oledb.12.0"
.ConnectionString="Extended Properties=Excel 12.0;"_
&"Data Source="&ThisWorkbook.FullName
.Open
End With
设置查询语句
SQL="select distinct 供货商 from[合同信息$]"
'开始查询
rs.Open SQL,cnn,adOpenKeyset,adLockOptimistic
'为供货商列表框ListBox1设置供货商名称
Fori=1To rs.RecordCount
ListBox1.AddItem rs!供货商
rs.MoveNext
Next i
'关闭查询
rs.Close
Set rs =Nothing
End Sub
运行这个窗体,就得到了如图3-3所示的效果。
利 用 WHERE 子句查询记录
在很多情况下,并不一定每一次都要将数据表内的数据全部取出,而是会有选择性地查 询满足条件的数据。例如,可能只要查询月销售额超过10万元的店铺,只查询工龄在10年 以上、学历为本科的员工信息、只查询应收款在100万元以上的客户等。要做到这一点,就 需要用到 WHERE子句。此时的SQL语句结构如下:
Select 字段列表 from 数据表 where 条件
案例3-3
下面的例子是从员工信息表中把财务部的所有员工数据提取出来,保存到当前的工作表中。
表中。
Sub 案例3-30
"定义Connection变量、Recordset对象变量、工作表对象变量ws、查找字符串变量SQL Dim cnn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim SQL As String
Dim ws As Worksheet
Dim i As Integer
'设置工作表对象,清除旧的数据
Set ws =ThisWorkbook.Worksheets(1)
ws.Cells.Clear
'建立与工作簿的连接
With cnn
.Provider ="microsoft.ace.oledb.12.0"
.ConnectionString="Extended Properties=Excel 12.0;"_
&"Data
.Open
End With
'设置查找语句
SQL="select*from [基本信息$]where 所属部门='财务部""
'执行查询
rs.Open SQL,cnn,adOpenKeyset,adLockOptimistic
'复制标题
Fori=1 To rs.Fields.Count
ws.Cells(1,i)=rs.Fields(i-1).Name
Next i
'复制查找出的数据
ws.Range("A2").Copy FromRecordset rs
'关闭查询和连接
rs.Close
cnn.Close
Set rs =Nothing
Set cnn =Nothing
End Sub
运行程序,就得到了如图3-4所示的结果。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们 18664393530@aliyun.com 处理,核实后本网站将在24小时内删除侵权内容。