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

相关推荐
VBA63374 天前
VBA信息获取与处理专题七第二节 网络通信过程的解读
vba
VBA633710 天前
数组与字典解决方案第二十九讲 数组的创建方法小结及回填的注意事项
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
VBA63371 个月前
VBA 64位API声明语句第021讲
vba