分享

VBA数据库解决方案第29讲:如何批量修改数据库中的记录

 xfzxlgs 2022-06-21 发布于江西

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

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

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

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

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

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

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

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

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

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

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

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

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

图片

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

图片

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

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

  DimcnADO, rsADO As Object

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

    rsADO.Open strSQL, cnADO, 1, 3

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

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

    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

    strField = Mid(strField, 2, Len(strField) - 1) '去除最前面的逗号

    '修改记录

   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

代码截图:

图片

代码讲解,我们仍是讲解最主要的部分:

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

    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

    strField = Mid(strField, 2, Len(strField) - 1) '去除最前面的逗号

    '修改记录

   strSQL = "UPDATE " & strTable & " A,[Excel12.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

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

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中打开相应的记录,关于SQL语句的写法,不作为本书的重点,实际遇到的语句大家可以理解,作为一种规范的写法即可,如果有兴趣的朋友可以参考专门的书籍。

 strSQL = "UPDATE " & strTable & " A,[Excel12.0;Imex=0;Database=" _

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

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

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

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

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

图片

然后我们修改一下:

图片

然后我们点击修改记录:

图片

会提示修改成功: 

图片

最后提示记录数:

图片

我们再次核对修改的情况:

图片

今日内容回向:

如何批量的修改记录?

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

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约