摘要:《VBA数据库解决方案》教程(版权10090845)是我推出的第二套教程,目前已经是第二版修订了。这套教程定位于中级,是学完字典后的另一个专题讲解。数据库是数据处理的利器,教程中详细介绍了利用ADO连接ACCDB和EXCEL的方法和实例操作,教程第一版的修订内
《VBA数据库解决方案》教程(版权10090845)是我推出的第二套教程,目前已经是第二版修订了。这套教程定位于中级,是学完字典后的另一个专题讲解。数据库是数据处理的利器,教程中详细介绍了利用ADO连接ACCDB和EXCEL的方法和实例操作,教程第一版的修订内容主要是完成所有程序文件的32位和64位OFFICE系统测试。
这套教程共两册,八十四讲,今后一段时间会给大家陆续推出修订后的教程内容。今日的内容是:VBA数据库解决方案第二十讲:SQL在VBA中几种常见的表达方式【分享成果,随喜正能量】100 真正能给你撑腰的,是丰富的知识储备,足够的经济基础,持续的情绪稳定,可控的生活节奏,和那个打不败的自己。。
在之前的讲解中我们从ADO的创建、连接到记录集的操作,已经讲了很多VBA对数据库的实际操作,到这里,读者应该对用VBA操作数据库有了一个清晰的印象,从各个步骤上看我们不难得出一个重要结论:要让ADO有效工作,关键是我们给它发出什么样的SQL指令。
在每一讲的讲解中,我已经简单介绍了SQL的情况。现在我们有必要总结一下VBA中SQL语句的几种常见查询的表达方式。
其中,”查询表达式”可以是下列之一或其组合,或者多种方式的组合,用逗号搁开:
(1)星号(*)表示“数据源”的所有字段。
(2)字段名
(3)常量表达式
(4)任何有效的计算表达方式
这类查询的SQL语句我们已经用了非常多了:如 strSQL = "SELECT * FROM 员工信息"
注意点:1) 有时使用AS重新命名字段名称 当查询表达式使用“字段名”时,字段名就是其本身,使用“常量表达式”和“任何有效的计算表达方式”时,系统将为该字段重新命名一个字段名,这个字段名通常没有意义,这时可以在表达式中使用AS为字段重新命名,当然对字段名也可以通过使用AS为其重新命名。AS并不对查询结果造成实质影响。下面是使用AS的一个例子:strSQL = "Select 班级,姓名 AS 名字,语文+数学+英语 AS 总成绩 from员工信息"
2) 使用DISTINCT删除重复记录
例如:在“员工信息”表中有重复记录,如果希望若干重复的记录只显示一条,可以使用DISTINCT进行限定。
strSQL = "Select distinct * from 员工信息"
上述数据中很多是有重复的。我们可以用下面的代码进行排重处理:
Sub mynz_20_1 '有重复数据,排重 第20讲 结构化查询语言SQL在VBA中的几种常见的查询表达方式
Dim cnADO As Object, rsADO As Object
Dim strPath As String, strSQL As String
Dim i As Integer
Set cnADO = CreateObject("ADODB.Connection")
Set rsADO = CreateObject("ADODB.RecordSet")
strPath = ThisWorkbook.Path & "\myData2.accdb"
cnADO.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strPath
'strSQL = "SELECT * FROM 信息参考"
strSQL = "Select distinct * from 信息参考"
rsADO.Open strSQL, cnADO, 1, 3
Sheets("20").Select
Cells.ClearContents
For i = 0 To rsADO.Fields.Count - 1
Sheets("20").Cells(1, i + 1) = rsADO.Fields(i).Name
Next i
For i = 1 To rsADO.RecordCount
For j = 0 To rsADO.Fields.Count - 1
Sheets("20").Cells(i + 1, j + 1) = rsADO.Fields(j)
Next j
rsADO.MoveNext
Next i
rsADO.Close
cnADO.Close
Set rsADO = Nothing
Set cnADO = Nothing
End Sub
部分代码截图:
(待续)
本讲内容参考程序文件:VBA与数据库操作(第一册).xlsm
我20多年的VBA实践经验,全部浓缩在下面的各个教程中:
来源:VBA语言专业教育