【分享成果,随喜正能量】当你不再傲慢地抗拒、偏执,与过去的自己握手言和,活出生活的热气腾腾。。 ​​

《VBA数据库解决方案》教程(10090845)是我推出的第二套教程,目前已经是第二版修订了。这套教程定位于中级,是学完字典后的另一个专题讲解。数据库是数据处理的利器,教程中详细介绍了利用ADO连接ACCDB和EXCEL的方法和实例操作,教程第一版的修订内容主要是完成所有程序文件的32位和64位OFFICE系统测试。

这套教程共两册,八十四讲,今后一段时间会给大家陆续推出修订后的教程内容。今日的内容是:VBA数据库之左外连接查询数据表

vba数据库查询(VBA数据库之左外连接查询数据表)(1)

第五十九讲 左外连接在数据表中的写法及应用

大家好,我们今天接着讲左外连接,今日讲左外连接在数据表中的应用。对于数据而言,有的放在EXCEL文件中,我们称之为工作表;有的放在数据库中,我们称之为数据表。两者都是数据的存储方式,这也是我在本书中着重讲解的两种数据连接的原因。并不是说数据库就一定是什么数据存储的高级设备,我们工作中最常接触的EXCEL也可以作为数据库来对应的,对于左外连接而言,我在上讲详细的介绍了和EXCEL工作表连接的应用,今日我将讲解这种连接和数据表连接的应用。

1 应用场景的具体分析

实例,我们还是用第57讲内容的数据表数据,在mydata2中的数据如下:

vba数据库查询(VBA数据库之左外连接查询数据表)(2)

在mydata中的数据如下:

vba数据库查询(VBA数据库之左外连接查询数据表)(3)

我们要知道在数据库mydata2中的所有员工分红情况,这个时候就可以用左外连接了。

2 左外连接提取数据资料的代码及代码解读

下面看我给出的代码:

Sub mynzRecords_59() '第59讲 左外连接应用于两个数据表的讲解

Dim cnADO As Object, rsADO As Object

Dim strPath As String, strSQL As String

Worksheets("59").Select

Cells.ClearContents

Set cnADO = CreateObject("ADODB.Connection")

Set rsADO = CreateObject("ADODB.Recordset")

strPath = ThisWorkbook.Path & "\mydata2.accdb"

strTable = "员工信息"

cnADO.Open "Provider=Microsoft.Ace.OLEDB.12.0;Data Source=" & strPath

strSQL = "SELECT a.员工编号,a.姓名,a.性别,b.金额 FROM " _

& "员工信息 AS a LEFT JOIN [MS Access;Pwd=;Database=" & ThisWorkbook.Path _

& "\mydata.accdb;].员工分红 AS b ON a.员工编号 = b.员工编号"

rsADO.Open strSQL, cnADO, 1, 3

For i = 1 To rsADO.Fields.Count

Cells(1, i) = rsADO.Fields(i - 1).Name

Next

Range("a2").CopyFromRecordset rsADO

ActiveSheet.Columns(rsADO.Fields.Count).NumberFormatLocal = "¥#,##0.00;¥-#,##0.00"

rsADO.Close

cnADO.Close

Set rsADO = Nothing

Set cnADO = Nothing

End Sub

代码截图:

vba数据库查询(VBA数据库之左外连接查询数据表)(4)

代码解读:

1) 不知大家注意到否,上述代码和内连接第57讲内容比较,我只是把上面的INNER换成了LEFT.

2) 我们需要注意的是这种连接方式的SQL语句的写法:strSQL = "SELECT a.员工编号,a.姓名,a.性别,b.金额 FROM " _

& "员工信息 AS a LEFT JOIN [MS Access;Pwd=;Database=" & ThisWorkbook.Path _

& "\mydata.accdb;].员工分红 AS b ON a.员工编号 = b.员工编号"

其中的连接第二个数据库的结构大家要千万注意,由于在之前的57讲中我详细的讲过了,不再多说,这里只是提醒大注意:在写代码的时候尽可能不要去书写,而是复制和修正,这样会让你的代码会更容易些。

好了,下面看代码的运行:

vba数据库查询(VBA数据库之左外连接查询数据表)(5)

今日内容回向:

1 左外连接和内连接返回的结果有什么不同?

2 左外连接连接数据表和工作表的方式有什么不同?

本讲内容参考程序文件:VBA与数据库操作(第二册).xlsm

今日内容回向:

1 什么是左外连接?

2 左外连接的语法是什么样子的?

本讲内容参考程序文件:VBA与数据库操作(第二册).xlsm

vba数据库查询(VBA数据库之左外连接查询数据表)(6)

我20多年的VBA实践经验,全部浓缩在下面的各个教程中:

vba数据库查询(VBA数据库之左外连接查询数据表)(7)

vba数据库查询(VBA数据库之左外连接查询数据表)(8)

vba数据库查询(VBA数据库之左外连接查询数据表)(9)

【分享成果,随喜正能量】独处时,将自己的内心安顿好,找回内心深处的勇气与力量,一路走,不回头。。

,