oracle case when 判断没有数据_批量判断工作表中的数据,只要在数据表中没有,那么添加...

大家好,今日继续讲解VBA数据库解决方案的第41讲,今日的内容是:工作表中存在的数据只要在数据表中没有,那么批量添加。在前几个章节中我重点给大家讲解了ADO连接EXCEL的方案,通过这个方案在实际的工作中可以解决一系列的实际问题,有的问题简单些,有的问题会复杂些,但总会在工作中看到实例的影子。ADO连接EXCEL中我测试是连接07版本以上的EXCEL,连接采用的是前期和后期相结合的方法。只是出于我个人的一些习惯,有不清楚的朋友要弄清必要的知识点。

VBA数据库解决方案是面向给中级及以上的人员教程,在讲解中侧重于实例的解决,不会再对内部的一些函数啊,语句啊做详细的讲解了,希望基本的知识点还没有完善掌握的朋友,通过《VBA代码解决方案》来完善自己。

今日的内容实例:对于工作表中给出的数据,首先在数据表中确认,如果数据表中没有那么就增加相应的记录。如下面的工作表数据:

a7a5fc1050e13f8d446a4001db70584c.png

其中100040 100041的记录在数据库的数据表中是没有的,我们要把这两条的记录增加进数据表中。怎么做到呢?

我们先分析一下:首先我们要检查这些记录在数据表中有没有,对于没有的才增加记录,那么我将建立一个记录集。这个记录集就是在工作表中存在而数据表为null 的记录。

代码:

Sub mynzUpdateRecords_41() '第41将 在数据表没有而工作表中存在的数据在数据表中批量增加的方案

Dim cnADO, rsADO As Object

Dim strPath, strTable, strSQL, strMsg As String

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 * FROM " & strTable

rsADO.Open strSQL, cnADO, 1, 3

MsgBox "当前记录数为:" & rsADO.RecordCount

rsADO.Close

'加入没有记录,那么增加

strSQL = " SELECT A.* FROM [Excel 12.0;Database=" & _

ThisWorkbook.FullName & ";].[" & ActiveSheet.Name & "$" _

& Range("A1").CurrentRegion.Address(0, 0) & "] A " _

& "LEFT JOIN " & strTable & " B " _

& "ON A.员工编号=B.员工编号 WHERE B.员工编号 IS NULL"

Set rsADO = CreateObject("ADODB.Recordset")

rsADO.Open strSQL, cnADO, 1, 3

If rsADO.RecordCount > 0 Then

strSQL = "INSERT INTO " & strTable & strSQL

cnADO.Execute strSQL

strMsg = strMsg & vbCrLf & rsADO.RecordCount & "条记录已添加到数据库!"

Else

strMsg = "这些记录都已经存在,没有记录添加到数据库!"

End If

MsgBox strMsg, vbInformation, "提示"

rsADO.Close

'汇报给用户记录数

strSQL = "SELECT * FROM " & strTable

rsADO.Open strSQL, cnADO, 1, 3

MsgBox "最新的记录数为:" & rsADO.RecordCount

rsADO.Close

'释放内存

cnADO.Close

Set rsADO = Nothing

Set cnADO = Nothing

End Sub

代码截图:

a0ef265c7b63133e816710e2ccebb04a.png
c8ed9fb8ac61a348a71dbfb8feef8d14.png

代码讲解:

1 '加入没有记录,那么增加

strSQL = " SELECT A.* FROM [Excel 12.0;Database=" & _

ThisWorkbook.FullName & ";].[" & ActiveSheet.Name & "$" _

& Range("A1").CurrentRegion.Address(0, 0) & "] A " _

& "LEFT JOIN " & strTable & " B " _

& "ON A.员工编号=B.员工编号 WHERE B.员工编号 IS NULL"

Set rsADO = CreateObject("ADODB.Recordset")

rsADO.Open strSQL, cnADO, 1, 3

If rsADO.RecordCount > 0 Then

strSQL = "INSERT INTO " & strTable & strSQL

cnADO.Execute strSQL

strMsg = strMsg & vbCrLf & rsADO.RecordCount & "条记录已添加到数据库!"

Else

strMsg = "这些记录都已经存在,没有记录添加到数据库!"

End If

MsgBox strMsg, vbInformation, "提示"

rsADO.Close

在这部分代码中实现了建立一个记录集,这个记录集是工作表中存在而数据表中是不存在的,这里要特别注意的是SQL语句的写法:

strSQL = " SELECT A.* FROM [Excel 12.0;Database=" & _

ThisWorkbook.FullName & ";].[" & ActiveSheet.Name & "$" _

& Range("A1").CurrentRegion.Address(0, 0) & "] A " _

& "LEFT JOIN " & strTable & " B " _

& "ON A.员工编号=B.员工编号 WHERE B.员工编号 IS NULL"

这个SQL的语句中分别连接了EXCEL和数据表,条件是A中存在的在B中为NULL的记录.

2 本书讲解的是VBA数据库的解决方案,一些SQL语句没有做详细的讲解,大家可以记住即可。SQL语句是一种专门的逻辑语言,如果大家不想专门的去学习,建议大家记住即可。

下面看我们的运行情况:

04ed000d1f138c50b42f9a7b321c8cef.png
2dcd7b85cf01c2eca2d302ebcbc6ddf6.png
d46454b4c80c692227b30ca9efbfb293.png
253cb96ee8d5a93e5866d87f5da689b3.png

今日内容回向:

1 如何建立数据库与EXCEL的双重连接?

2 null是0值么?

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值