VBA数据库解决方案第三十一讲 DELETE+ADDNEW实现类似于UPDATA功能

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

这套教程共两册,八十四讲,今后一段时间会给大家陆续推出修订后的教程内容。今日的内容是:VBA数据库解决方案第三十一讲 DELETE+ADDNEW实现类似于UPDATA功能

【分享成果,随喜正能量】在这个社会上,对别人好一点,多站在别人的角度考虑,不要为小事争执,不要取笑他人,不要在别人背后嚼舌根,更不能逼人太甚。凡事退一步,对你有好处。

第三十一讲 DELETE+ADDNEW实现类似于UPDATA功能

大家好,今日我们继续VBA数据库解决方案的第31讲:用DELETE+ADDNEW的方法实现类似于UPDATA的方法实例。在最近的讲解中,我总在强调,实现目的方法有很多种,我们要灵活的对应。今日我们的内容同上一讲的目的一样,但我们要用其他的方法来实现。内容是用DELETE+ADDNEW的方法实现类似UPDATA的方法。

1 应用场景的具体分析

实例:下面的工作表为数据库中员工信息表的记录

我们要把其中部门是"一厂""二厂"的记录修正为"三厂",用DELETE+ADDNEW如何做到呢?

2 DELETE+ADDNEW方法实现批量编辑的代码及代码解读

好的,我们仍是先看看程序代码:

Sub mynz_31()

'第31讲 用DELETE+ADDNEW的方法实现UPDATA的方法

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

'汇报给用户记录数

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

rsADO.Close

strWhere = " WHERE EXISTS(" _

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

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

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

& "WHERE 员工编号=" & strTable & ".员工编号)"

strSQL = "SELECT 员工编号 FROM " & strTable & strWhere

rsADO.Open strSQL, cnADO, 1, 3

If rsADO.RecordCount > 0 Then

strSQL = "DELETE FROM " & strTable & strWhere

cnADO.Execute strSQL

MsgBox rsADO.RecordCount & "条记录被删除。", vbInformation, "提示"

Else

MsgBox "没有发现需要删除的记录。", vbInformation, "提示"

End If

rsADO.Close

'汇报给用户记录数

strSQL = "SELECT * FROM " & strTable

rsADO.Open strSQL, cnADO, 1, 3

MsgBox "删除后记录数为:" & rsADO.RecordCount

'添加记录

Sheets(ActiveSheet.Name).Select

t = 2

Do While Cells(t, 1) <> ""

If rsADO.RecordCount > 0 Then rsADO.MoveLast

rsADO.addnew

For i = 0 To rsADO.Fields.Count - 1

rsADO.Fields(i) = ActiveSheet.Cells(t, i + 1)

Next i

rsADO.Update

t = t + 1

Loop

'汇报给用户最后的记录数

MsgBox "添加后记录数为:" & rsADO.RecordCount

'释放内存

rsADO.Close

cnADO.Close

Set rsADO = Nothing

Set cnADO = Nothing

End Sub

部分代码截图:

代码的解读:

1)先删除记录:

strWhere = " WHERE EXISTS(" _

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

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

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

& "WHERE 员工编号=" & strTable & ".员工编号)"

strSQL = "SELECT 员工编号 FROM " & strTable & strWhere

rsADO.Open strSQL, cnADO, 1, 3

If rsADO.RecordCount > 0 Then

strSQL = "DELETE FROM " & strTable & strWhere

cnADO.Execute strSQL

MsgBox rsADO.RecordCount & "条记录被删除。", vbInformation, "提示"

Else

MsgBox "没有发现需要删除的记录。", vbInformation, "提示"

End If

rsADO.Close

'汇报给用户记录数

strSQL = "SELECT * FROM " & strTable

rsADO.Open strSQL, cnADO, 1, 3

MsgBox "删除后记录数为:" & rsADO.RecordCount

这段代码实现了将工作表的数据在数据表中删除的功能,并随时汇报后台程序的进展情况。

2) 在运行完删除的功能后,将进入到下面的代码:

'添加记录

Sheets(ActiveSheet.Name).Select

t = 2

Do While Cells(t, 1) <> ""

If rsADO.RecordCount > 0 Then rsADO.MoveLast

rsADO.addnew

For i = 0 To rsADO.Fields.Count - 1

rsADO.Fields(i) = ActiveSheet.Cells(t, i + 1)

Next i

rsADO.Update

t = t + 1

Loop

'汇报给用户最后的记录数

MsgBox "添加后记录数为:" & rsADO.RecordCount

以上代码将根据工作表中提供的数据在数据表中添加记录。

下面我们看看程序的运行,首先会提示给用户删除前的记录数:

接着提示删除的记录数:

并告诉用户删除后记录数为0:

最后添加记录,并汇报添加后的记录数:

我们再次看看现在数据库中的记录情况:

今日内容回向:

1 本讲的内容利用了之前哪讲的内容?

2 通过本讲的讲解,读者是否有新的思路?

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

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

相关推荐
VBA63378 天前
AI批量PDF数据抓取工具
vba
Access开发易登软件11 天前
我全新开发了一套 Access 通用 Excel 导入工具,现在开源了
数据库·microsoft·excel·mfc·vba·access·access开发
VBA633711 天前
VBA之Word应用第五章第九节 Range对象的方法(三)
vba
wuchunyu00215 天前
VBA 行内容相同时字体变灰
vba
VBA633719 天前
VBA 64位API声明语句第025讲
vba
Access开发易登软件22 天前
Access 导入 Markdown 表格:把文档里的数据写进表
前端·html·vba·markdown·access开发
zhongwei2281 个月前
vba将一个文件夹的内容复制到另外一个文件夹的函数,若存在则是否覆盖的参数。复制前检查源文件夹是否存在。若目标文件夹不存在,则新建
前端·vba
Access开发易登软件1 个月前
Access 复杂业务计算,SQL 写在 VBA 还是存储过程?
microsoft·vba·access·access开发
SunnyDays10112 个月前
如何使用 Python 添加和编辑 Excel VBA 宏(无需安装 Excel)
开发语言·python·excel·vba
taller_20002 个月前
【005】PiE 与传统 VBA 的核心区别
python·vba·pie·py