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

工作表右外连接查询的应用

VBA语言専攻 2023-01-06
96
【分享成果,随喜正能量】人生总有因果循环,有时是你种下什么因,就结下什么果。有时却是种的下因,却结不下果。。
  《VBA数据库解决方案》教程(10090845)是我推出的第二套教程,目前已经是第二版修订了。这套教程定位于中级,是学完字典后的另一个专题讲解。数据库是数据处理的利器,教程中详细介绍了利用ADO连接ACCDB和EXCEL的方法和实例操作,教程第一版的修订内容主要是完成所有程序文件的32位和64位OFFICE系统测试。
这套教程共两册,八十四讲,今后一段时间会给大家陆续推出修订后的教程内容。今日的内容是:工作表右外连接查询的应用

第六十讲  在工作表查询中右外连接的应用

大家好,我们继续各种连接的讲解,之前我们分别讲解了内连接,左外连接在工作表和数据表中的具体应用,通过各种连接方式的解读,我们也逐渐理解了之前讲解的许多内容。我们今日这讲的内容是右连接。

1  什么是右外连接,右外连接的应用实际场景

什么是右外连接呢?就是是以右表为基准,将条件数据进行连接,然以将右表为基础,没有对应项显示的左表列为NULL,换种说法,就是根据右表的记录,在被连接的左表中找出符合条件的记录与之匹配,如果找不到匹配的,用null填充。

特点:将返回右表的所有行,如果右表的某行在左表中没有匹配行,则将为左表返回空值;
下面我们仍是以工作表为例把右外连接的应用和写法讲给大家。

实例,我们是以下面的数据作为今日的讲解基础数据,然后我要建立一个右外连接提取数据:

提取字段是a.型号,a.生产厂,a.数量,b.供应商。由于我们有了之前内连接和左外连接的基础,我们想想返回的将是什么样的结果呢?

2  右外连接工作表应用的代码及代码解读

下面我们看我给出的代码:

Sub mynzRecords_60() '第60讲 右外联接(工作表)
    Dim cnADO As Object, rsADO As Object
    Dim strPath As String, strSQL As String
    Worksheets("60").Select
    '清空工作表
    Cells.ClearContents
    '建立连接
    Set cnADO = CreateObject("ADODB.Connection")
    Set rsADO = CreateObject("ADODB.Recordset")
    '给出连接路径
    strPath = ThisWorkbook.FullName
    '打开连接
    cnADO.Open "provider=Microsoft.ACE.OLEDB.12.0;extended properties='excel 12.0;hdr=yes;imex=1';data source=" & strPath
    '右外连接的SQL语句
    strSQL = "Select a.型号,a.生产厂,a.数量,b.供应商 From [数据$] as a RIGHT JOIN [数据2$] 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
    '关闭记录集连接,释放内存
    rsADO.Close
    cnADO.Close
    Set rsADO = Nothing
    Set cnADO = Nothing
End Sub


代码截图:

代码解读:
1)  '右外连接的SQL语句
strSQL = "Select a.型号,a.生产厂,a.数量,b.供应商 From [数据$] as a RIGHT JOIN [数据2$] as b ON a.型号=b.型号"
大家或许注意到了,上面的语句中我只是把左外连接中的LEFT 改为了RIGHT, 修正是非常的简单,但是返回的结果两者大不相同。
2)  '提取表头数据
    For i = 1 To rsADO.Fields.Count
        Cells(1, i) = rsADO.Fields(i - 1).Name
Next
上述代码我给出的注释是提出表头数据,其实就是建立起来的rsADO连接的Fields的名称,也就是字段名。

下面看代码的运行结果;
 
今日内容回向:
1  什么是右外连接?它的特点是什么?
2  右外连接的SQL语句如何写?


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


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

【分享成果,随喜正能量】一切诸法皆如幻,本性自空那用除。若识心性非形象,湛然不动自真如。。


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

评论