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实践经验,全部浓缩在下面的各个教程中:

相关推荐
VBA63372 天前
VBA高级应用30例 应用6 第5部分:5 利用VBA从XML文件中导出数值数据
vba
VBA633710 天前
VBA信息获取与处理专题七第二节 网络通信过程的解读
vba
VBA633716 天前
数组与字典解决方案第二十九讲 数组的创建方法小结及回填的注意事项
vba
小妖6661 个月前
excel 怎么在单元格内容自动加上一段文字不能用公式
excel·vba
VBA63371 个月前
VBA之Word应用第五章第五节 Range对象的属性(四)
vba
VBA63371 个月前
VBA信息获取与处理专题七第一节 网络通信基础
vba
yivifu1 个月前
怎样将Word文档中脚注引用后面的空格轻松删除
word·vba
VBA63371 个月前
VBA之Excel应用第五章第四节 变量的生命周期
vba
VBA63371 个月前
VBA中类的解读及应用第三十五讲 类对象的生死轮回----“二师兄”的成长历程之七
vba
SunnyDays10111 个月前
使用 C# 添加、修改和删除 Excel VBA 宏 (无需 Microsoft Office Interop)
c#·excel··vba