pb90代码如何连接sql2008r2_Inner join连接两个数据表的应用讲解

大家好,我们继续讲解VBA数据库解决方案,今日讲解第57讲内容: 内连接(Inner join)应用于两个数据表的讲解。这讲的内容还是讲内连接的应用,我们在上一讲中讲了内连接在工作表中的应用,今天的内容是内连接在数据表中的应用。大家要清楚我本书中常用的一些概念,工作表指的是EXCEL文件中的工作表,数据表是指我们数据库中的数据表,是两个不同的概念。对于数据表而言,我此书中讲解的主要利用的是accdb 数据库。

在上节中我们讲了内连接的意义:内连接是从结果表中删除与其他被连接表中没有匹配行的所有行,返回与连接条件匹配的数据行。我们在数据库mydat2中有员工信息的表如下:

1b8800bc732bdba5746d24cf13fe3ad1.png

在数据库mydata中有分红记录如下:

e0ebefa6be4e7c5d4e0ec8d08e8e21ae.png

我们要根据两个表中记录的员工编号匹配一下员工的分红情况记录返回到工作表中,这里该怎么写这个代码呢?

先看看我给出的代码:

Sub mynzRecords_57() '第57讲 内连接(Inner join)应用于两个数据表的讲解

Dim cnADO, rsADO As Object

Dim strPath, strSQL As String

Worksheets("57").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 INNER 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

代码截图:

4917fdf17a2300c9ce59279368f43465.png

代码讲解:

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

& "员工信息 AS a INNER JOIN [MS Access;Pwd=;Database=" & ThisWorkbook.Path _ & "mydata.accdb;].员工分红 AS b ON a.员工编号 = b.员工编号"

我们看上面的代码,这部分代码中选择了字段:a.员工编号,a.姓名,a.性别,b.金额这些字段分别来自不同的数据表。其中a 的数据表是"员工信息"。 b的数据表为:

[MS Access;Pwd=;Database=" & ThisWorkbook.Path & "mydata.accdb;].员工分红 通过连接的字段为两个数据表中员工编号要相同。

2 Range("a2").CopyFromRecordset rsADO

这行代码是复制出记录

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

上述代码是把单元格设置成金额的格式。

下面我们看代码的运行:

e83fd6afbf7f3b1ea69681c3c7d4d791.png

今日内容回向:

1 什么是内连接?

2 用内连接如何连接两个数据表?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值