使用常量值替换表中多个列的空值

时间:2015-03-15 18:11:09

标签: vba ms-access access-vba

我正在尝试运行一个脚本,用MS Access 2007中的常量值替换表中的所有空值。我完全知道这可以使用更新查询来完成。但是我需要在一次点击中为所有列执行此操作。我认为find / replace可以做到这一点,但我仍然宁愿最小化这个过程中的任何手动工作。

我尝试使用此代码但是当我尝试运行它时,它只是没有做任何事情。它甚至不会触发错误。

Sub replacingnulls()

Dim dbs As DAO.Database
Dim rs As DAO.Recordset
Dim fld As DAO.Field

Set dbs = CurrentDb
Set rs = dbs.OpenRecordset("testtable", dbOpenTable)

If Not (rs.EOF And rs.BOF) Then
    rs.MoveFirst
    Do Until rs.EOF = True
            rs.Edit

        For Each fld In rs.Fields

            If IsNull(fld.Value) Then
                fld.Value = 555

            End If
        Next fld
        rs.MoveNext
  Loop
Else
    MsgBox ("There are no records")
End If

rs.Close

End Sub

1 个答案:

答案 0 :(得分:3)

调用rs.Update保存您对当前记录所做的更改,然后再转到下一条记录。

Next fld
rs.Update ' <-- add this
rs.MoveNext

您可以在每个字段中执行一个UPDATE,而不是循环遍历表行,然后遍历每行中的每个字段。

Const cstrTable As String = "testtable"
Dim db As DAO.Database
Dim fld As DAO.Field
Dim tdf As DAO.TableDef
Dim strUpdate As String

Set db = CurrentDb
Set tdf = db.TableDefs(cstrTable)
For Each fld In tdf.Fields
    ' Access will complain if you attempt an UPDATE on an autonumber field,
    ' so skip field with dbAutoIncrField attribute
    If Not ((fld.Attributes And dbAutoIncrField) = dbAutoIncrField) Then
        strUpdate = "UPDATE [" & cstrTable & "] SET [" & fld.Name & _
            "] = 555 WHERE [" & fld.Name & "] Is Null;"
        'Debug.Print strUpdate
        db.Execute strUpdate, dbFailOnError
    End If
Next

请注意,无论字段的数据类型如何,代码都会尝试用555替换所有Null。如果所有字段都是普通数字,那可能没问题。但是,具有Null的日期/时间字段将变为 Jul 8 1901 00:00:00 。 OTOH,你的记录集方法会做同样的事情......所以如果它在那里也没关系,那么它也应该没问题。