VBA数据库解决方案第二十九讲 如何批量修改数据库中的数据

《VBA数据库解决方案》教程(版权10090845)是我推出的第二套教程,目前已经是第二版修订了。这套教程定位于中级,是学完字典后的另一个专题讲解。数据库是数据处理的利器,教程中详细介绍了利用ADO连接ACCDB和EXCEL的方法和实例操作,教程第一版的修订内容主要是完成所有程序文件的32位和64位OFFICE系统测试。

这套教程共两册,八十四讲,今后一段时间会给大家陆续推出修订后的教程内容。今日的内容是:VBA数据库解决方案第二十九讲 如何批量修改数据库中的数据

【分享成果,随喜正能量】心有时就跟屋子一样,需要定期打扫一下。该洗的洗,该丢的丢,然后再把喜欢的生活装进去,日子就会明亮起来。好好生活,好好爱自己,把期待降低,把依赖减少,你会过得更好。​​​

第二十九讲 如何批量修改数据库中的数据

大家好,今日我们继续VBA数据库解决方案的第29讲:如何批量修改数据库中的记录。在数据库解决方案中,我从实际应用的角度,把工作中可能遇到的各种情况都尽可能的给罗列上,我们先后讲了:

① 如何在数据库中动态删除和建立数据表(第14讲)

② 在已有的数据表中删除、添加、修改字段的方法(第21讲);

③ 根据工作表中的数据,生成数据库中新的数据表的方法(第22讲);

④ 向一个已有的数据表中添加数据记录的方法(第23讲);

⑤ 把工作表中提供的数据在数据表中逐一删除(可以是重复的记录)的通用方法(第24讲);

⑥ 把工作表中提供的特定数据在数据库中批量删除的方法(第25讲);

⑦ 把工作表中不存在的记录在数据表中批量删除的方法(第26讲);

⑧ 把数据表中特殊的记录删除的方法(第27讲);

⑨ 把数据表中对应工作表的数据首先删除,然后向数据表中导入工作表的数据(第28讲)

以上的各种方法都不是孤立的,有的可以组合利用,比如:第⑨的方法可以用⑤+④的方法解决,大家学习知识千万不可教条,很多朋友希望我能把所有的实际情况都写出来。但那是不可能的,工作中总会遇到实际的问题,要具体的问题具体的分析。

1 应用场景的具体分析

今日我们讲解的内容是如何批量的修改记录,这个问题也可以先删除,再添加记录来解决。当然,我们今日要讲的方法和上述的思路不一样:

实例:如下,数据库中有如下记录:

我们要把民族修正为下面的内容:

2 批量修改数据库中的数据 的代码及代码解读

如何处理呢,我们看代码:

Sub mynz_29() '第29讲 批量修改记录

Dim cnADO As Object, rsADO As Object

Dim strPath As String, strTable As String, strWhere As String, strSQL As String, 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

.....

'构建一个字符串,用在SQL中

i = 1

Do While ActiveSheet.Cells(1, i) <> ""

strField = strField & ",A." & ActiveSheet.Cells(1, i).Value & "=B." & ActiveSheet.Cells(1, i).Value

....

strSQL = "UPDATE " & strTable & " A,[Excel 12.0;Imex=0;Database=" _

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

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

& "SET " & strField & " WHERE A.员工编号=B.员工编号"

'MsgBox (strSQL)

cnADO.Execute strSQL

MsgBox "数据修改成功。", 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

代码截图:

代码讲解:

1)i = 1

Do While ActiveSheet.Cells(1, i) <> ""

strField = strField & ",A." & ActiveSheet.Cells(1, i).Value & "=B." & ActiveSheet.Cells(1, i).Value

i = i + 1

Loop

上述代码首次要构建一个字符串然后用在SQL中:这个字符串的组成其实要说明的是两个表(工作表和数据表)中的字段相同。

2) strSQL = "UPDATE " & strTable & " A,[Excel 12.0;Imex=0;Database=" _

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

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

& "SET " & strField & " WHERE A.员工编号=B.员工编号"

上述语句是一个SQL语句,关于SQL语句的写法,大家可以先不用过度的关注,实际遇到的语句大家可以理解,作为一种规范的写法即可。在本书的后半部分有各种连接的讲解。

这条SQL语句中"UPDATE "是编辑记录,修改的记录集的记录.然后用EXECUTE执行.

下面我们看程序的运行过程:我们先显示一下数据库中的记录:

然后我们修改一下,点击修改记录:

最后提示记录数:

我们再次查看数据表中的记录的情况:

今日内容回向:

1 如何批量的修改记录?

2 上述批量修改记录的方法还有什么?

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

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

相关推荐
fengyehongWorld4 天前
VBA 操作PowerQuery表格和带名字的表格
excel·vba
Access开发易登软件18 天前
在 Access 实现标签输入控件:VBA + HTML 混合开发实战
前端·数据库·信息可视化·html·excel·vba·access
VBA633720 天前
如何学习VBA之3.4 初级阶段自测题
vba
yivifu21 天前
使用VBA区分简体中文段落和繁体中文段落的方法
word·excel·vba
VBA633724 天前
VBA之Word应用:在Word中,什么是Range对象
vba
LAM LAB1 个月前
【VBA】Excel指定单元格范围内字体设置样式,处理导出课表单元格
excel·vba
LAM LAB1 个月前
【VBA】Excel实现批量对单元格替换、加粗文字
excel·vba
VBA63372 个月前
VBA技术资料MF432:数组排序
vba
VBA63372 个月前
VBA编程经典460句372-420
vba