ad

《Excel VBA+SQL数据管理与应用模板开发》_3.2.2 利用 DISTINCT 查询不重复记录

网友投稿 151 2023-11-07

【摘要】 本书摘自《Excel VBA+SQL数据管理与应用模板开发》一书中第3章,第2节,韩小良著。

3.2.2 利用 DISTINCT 查询不重复记录

在一个数据表中,某些字段的记录数据可以是重复的,例如,数据表“销售记录”中记 录的是各个客户在不同日期的销售记录流水账,假如要提取不重复的客户名称,以便将这样 的客户名称用作他用(例如,设置动态的有效性,设置复合框和列表框的项目),那么就可 以使用 DISTINCT 属性词消除重复记录。此时, SQL 语句如下:

Select DISTINCT字段 FROM 数据表

《Excel VBA+SQL数据管理与应用模板开发》_3.2.2 利用 DISTINCT 查询不重复记录

案例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小时内删除侵权内容。

上一篇:达人之路·《高效办公应用宝典公式·函数与VBA》_6.3.1 MAX函数找出最大值
下一篇:跟着一起学《Excel VBA跟卢子一起学 早做完 不加班 基础入门版》_1.2.3 宏的录制
相关文章
×