排行
数据库百科
核心案例
行业报告
月度解读
大事记
产业图谱
中国数据库
向量数据库
时序数据库
实时数据库
搜索引擎
空间数据库
图数据库
数据仓库
大调查
2021年报告
2022年报告
年度数据库
2020年openGauss
2021年TiDB
2022年PolarDB
2023年OceanBase
首页
资讯
活动
大会
学习
课程中心
推荐优质内容、热门课程
学习路径
预设学习计划、达成学习目标
知识图谱
综合了解技术体系知识点
课程库
快速筛选、搜索相关课程
视频学习
专业视频分享技术知识
电子文档
快速搜索阅览技术文档
文档
问答
服务
智能助手小墨
关于数据库相关的问题,您都可以问我
数据库巡检平台
脚本采集百余项,在线智能分析总结
SQLRUN
在线数据库即时SQL运行平台
数据库实训平台
实操环境、开箱即用、一键连接
数据库管理服务
汇聚顶级数据库专家,具备多数据库运维能力
数据库百科
核心案例
行业报告
月度解读
大事记
产业图谱
我的订单
登录后可立即获得以下权益
免费培训课程
收藏优质文章
疑难问题解答
下载专业文档
签到免费抽奖
提升成长等级
立即登录
登录
注册
登录
注册
首页
资讯
活动
大会
课程
文档
排行
问答
我的订单
首页
专家团队
智能助手
在线工具
SQLRUN
在线数据库即时SQL运行平台
数据库在线实训平台
实操环境、开箱即用、一键连接
AWR分析
上传AWR报告,查看分析结果
SQL格式化
快速格式化绝大多数SQL语句
SQL审核
审核编写规范,提升执行效率
PLSQL解密
解密超4000字符的PL/SQL语句
OraC函数
查询Oracle C 函数的详细描述
智能助手小墨
关于数据库相关的问题,您都可以问我
精选案例
新闻资讯
云市场
登录后可立即获得以下权益
免费培训课程
收藏优质文章
疑难问题解答
下载专业文档
签到免费抽奖
提升成长等级
立即登录
登录
注册
登录
注册
首页
专家团队
智能助手
精选案例
新闻资讯
云市场
微信扫码
复制链接
新浪微博
分享数说
采集到收藏夹
分享到数说
首页
/
先删除数据库中的记录,然后再导入
先删除数据库中的记录,然后再导入
VBA语言专家
2021-12-01
486
【分享成果,随喜正能量】
如果说生活是一张白纸,等待我们用自己的奋斗描绘出拼搏的轨迹,那么生命便是一枝铅笔,它总是用自己瘦瘦的身躯,在洁白的素笺上流泻出笔底的风风雨雨……它还给予我们这样一个有力的启示——做人,要像它一样,时时刻刻把腰杆挺直!拒绝是一种气度,更是一种勇气。拒绝肤浅,接纳深沉。拒绝憎恶,接纳宽容、关怀和容忍。拒绝虚伪,接纳真诚。拒绝假、恶、丑,接纳美……生活中,一条充满诱惑的大路在脚下延伸着,只有学会拒绝才不会步入歧途。
《VBA数据库解决方案》教程是我推出的第二套教程,目前已经是第一版修订了。这套教程定位于中级,是学完字典后的另一个专题讲解。数据库是数据处理的利器,教程中详细介绍了利用ADO连接ACCDB和EXCEL的方法和实例操作,教程第一版的修订内容主要是完成所有程序文件的32位和64位OFFICE系统测试。
这套教程共两册,八十四讲,今后一段时间会给大家陆续推出修订后的教程内容。今日的内容是第28讲:先删除数据库中的记录,然后再导入
第二十八讲 删除数据表数据,然后导入工作表中数据
大家好,我们今日继续讲解VBA数据库解决方案的第28讲内容:利用VBA,把数据表中对应工作表的数据首先删除,然后向数据表中导入工作表数据。数据库的讲解已经持续一段时间了,从对简单数据库的认识到利用VBA对数据库的操作,我们一步步的走来,估计大家已经学到了很多知识。最近的内容主要是操作,我把我可能想到的各种情况给大家介绍讲解,这些都是我们在实际的工作中会遇到的情况,只要大家掌握了代码,并结合一下自己的工作实际,很快就会写出自己的代码。当然要想改代码必须对代码有全面的理解。
1 应用场景的具体分析
今日给大家讲的情况是:数据库录入错了,但关键的字段没有错误,这时我们怎么处理呢?这时的处理方案是:首先要删除之前录入的数据,然后修改数据并再次录入。
实例:我们在录入员工信息时,不小心把民族给录入错误,如下面的工作表:
人员的民族应该为汉,不小心录入了数字,这时改怎么处理呢?这就是我这节要面对的解决方案:先删除,再导入正确的。
2 在数据表中先删除已有的数据,然后添加记录的代码及代码解读
怎么做到呢:看下面的代码:
Sub mynz_28() '第28讲 利用VBA,根据工作表的数据,在数据表中先删除已有的数据,然后添加记录
Dim cnADO, rsADO As Object
Dim strPath, strTable, strWhere, strSQL, strMsg As String
Set cnADO = CreateObject("ADODB.Connection")
Set rsADO = CreateObject("ADODB.Recordset")
【详细代码见教程】
rsADO.Close
cnADO.Close
Set rsADO = Nothing
Set cnADO = Nothing
End Sub
代码截图:
代码解读:
代码共分三部分:
1) 第一部分仍是建立连接记录集一直到MsgBox "当前记录数为:" & rsADO.RecordCount 后关闭了记录集的连接,这部分和前几讲的内容是一致的,不再过多的讲解,
2) 第二部分:
'打开数据表中存在的员工编号相同的记录
strSQL = "DELETE FROM " & strTable & " A WHERE EXISTS(" _
& "SELECT * FROM [Excel 12.0;Database=" & _
ThisWorkbook.FullName & "].[" & ActiveSheet.Name & "$" _
& Range("a1").CurrentRegion.Address(0, 0) & "] " _
& "WHERE 员工编号=A.员工编号)"
cnADO.Execute strSQL '把这些记录删除
'下面将添加记录
strSQL = "INSERT INTO " & strTable & " SELECT * FROM [Excel 12.0;Database=" _
& ThisWorkbook.FullName & ";].[" & ActiveSheet.Name & "$" _
& Range("A1").CurrentRegion.Address(0, 0) & "]"
cnADO.Execute strSQL
MsgBox "纪录添加成功。", vbInformation, "添加纪录"
这部分中,先要打开已经有的记录,然后删除,接着,在此导入正确的记录。我们要理解的是:strSQL = "DELETE FROM " & strTable & " A WHERE EXISTS(" _
& "SELECT * FROM [Excel 12.0;Database=" & _
ThisWorkbook.FullName & "].[" & ActiveSheet.Name & "$" _
& Range("a1").CurrentRegion.Address(0, 0) & "] " _
& "WHERE 员工编号=A.员工编号)"
这条SQL语句的意思是删除一些记录,什么记录呢?就是在数据表strTable中两者员工编号相同的记录。然后,ADO 执行SQL命令:cnADO.Execute strSQL 。
在此导入记录就相对简单了:同样
strSQL = "INSERT INTO " & strTable & " SELECT * FROM [Excel 12.0;Database=" _
& ThisWorkbook.FullName & ";].[" & ActiveSheet.Name & "$" _
& Range("A1").CurrentRegion.Address(0, 0) & "]"
然后执行。
这里我们介绍一下Execute命令和INSERT INTO 命令的意义:
u
Execute 方法可以执行指定SQL 语句.
u
INSERT INTO 语句用于向表格中插入新的行。
3) 第三部分的代码是从汇报给用户记录数,同时要释放内存。这部分就不再多说了。
下面看看我们程序的运行情况:
我们首先修正EXCEL工作表中的记录为正确的值:
然后运行,首先会提示当前的记录数:
然后,后台删除记录,添加记录,提示给我们:
最后反馈处理完成的记录:
我们这时可以再看看数据库中的记录,点击总记录显示:
可以看到我们修改完成。
今日内容回向:
1 如何修改已经存在的记录?
2 除了上述方案,完成本讲的内容,你是否还有其他的方案?
本讲内容参考程序文件:VBA与数据库操作(第一册).xlsm
我20多年的VBA实践经验,全部浓缩在下面的各个教程中:
数据库
文章转载自
VBA语言专家
,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
领墨值
有奖问卷
意见反馈
客服小墨