暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

数据库右外连接查询的应用

VBA语言専攻 2023-02-01
0
【分享成果,随喜正能量】不要着急,最好的总会在最不经意间出现,纵使伤心,也不要愁眉不展,因为你不知道谁会爱上你的笑容。。
  《VBA数据库解决方案》教程(10090845)是我推出的第二套教程,目前已经是第二版修订了。这套教程定位于中级,是学完字典后的另一个专题讲解。数据库是数据处理的利器,教程中详细介绍了利用ADO连接ACCDB和EXCEL的方法和实例操作,教程第一版的修订内容主要是完成所有程序文件的32位和64位OFFICE系统测试。
这套教程共两册,八十四讲,今后一段时间会给大家陆续推出修订后的教程内容。今日的内容是:数据库右外连接查询的应用

第六十一讲  右外连接在数据表查询中的应用

大家好,今日继续讲解VBA数据库解决方案,今日讲解的是第61讲,右外连接在数据表中的应用。各种的连接方式我在最近讲解中逐渐展开,每种的连接我都分别讲在工作表中的应用和数据表中应用,尽可能的让大家全面的了解到连接的应用。

1  应用场景的具体分析

今日的内容是右外连接在数据表查询中的应用。上一讲中我们讲了右外连接的意义和特点,并讲了工作表中的应用,在数据表中的应用也比较类似,我们还是以两个数据表为例进行说明。
实例,如下的数据表,其一是mydata2中的数据如下:
其二是mydata中的数据如下:
我们要在两个工作表间建立一个右连接,连接的条件是员工编号相同,提取字段为:a.员工编号,a.姓名,a.性别,b.金额 ,大家可以想象一下将会返回什么样的一个结果呢?

2  右外连接在数据表中应用的代码及代码解读

下面我们先用代码来实现我的上述要求,我给出的代码如下:

Sub mynzRecords_61() '第61讲 右外连接应用于两个数据表的讲解
    Dim cnADO As Object, rsADO As Object
    Dim strPath As String, strSQL As String
    Worksheets("61").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
    '建立右连接的SQL语句
    strSQL = "SELECT a.员工编号,a.姓名,a.性别,b.金额 FROM  " _
        & "员工信息 AS a right JOIN [MS Access;Pwd=;Database=" & ThisWorkbook.Path _
        & "\mydata.accdb;].员工分红 AS b ON a.员工编号 = b.员工编号"
    rsADO.Open strSQL, cnADO, 1, 3 '打开rs
    '提出表头数据
    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


代码截图:
代码解读:
1)  上述代码实现了一个右外连接的实例,大家尽可能的利用现有代码,复制后简单的修正使用,不要去书写。
2)   和之前的左外连接比较我只是将left 修正为right,虽然是一个参数的变化,但会给我们带来很大的不同。
3)  '建立右连接的SQL语句
    strSQL = "SELECT a.员工编号,a.姓名,a.性别,b.金额 FROM  " _
        & "员工信息 AS a right JOIN [MS Access;Pwd=;Database=" & ThisWorkbook.Path _
        & "\mydata.accdb;].员工分红 AS b ON a.员工编号 = b.员工编号"
这句代码中以员工分红的表为b,以员工信息 为表a,在b表连接时我给出的代码是  [MS Access;Pwd=;Database=" & ThisWorkbook.Path & "\mydata.accdb;].员工分红其中MS指的是Microsoft的略写,数据库是没有密码的。

下面我们看得出的结果:
和你之前的想象结果是否一致呢?为什么最后三行前三列数空值呢?

今日内容回向:
1  右外连接在数据表中如何实现查询呢?
2  上述的数据中为什么最后三行前三列数空值呢?


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





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


【分享成果,随喜正能量】去看山河万里,终究都是在这内心的情怀世界;去看岁月时光,终究在见证着自我向前的一种突围和成长。。


文章转载自VBA语言専攻,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论