VBA中的时间比较:同时不等

时间:2017-12-13 09:46:33

标签: vba access-vba

我正在将数据库从Microsoft Access移动到SQL服务器,并验证远程和本地表之间的数据相等性。在这样做时,我在比较时间字段时遇到了一个奇怪的现象。

我正在使用以下功能:

Public Function CheckAllFieldsEqual(rs1 As DAO.Recordset, rs2 As DAO.Recordset) As Boolean
    Dim fld As DAO.Field
    CheckAllFieldsEqual = True
    For Each fld In rs1.Fields
        If fld.Value <> rs2.Fields(fld.NAME).Value Then GoTo ReturnFalse
    Next fld
    Exit Function
ReturnFalse:
    Debug.Print "Fields inequal! " & fld.NAME & ": " & fld.Value & " - "; rs2.Fields(fld.NAME).Value
    CheckAllFieldsEqual = False
    MsgBox "Inequal!", vbCritical
    Stop
End Function

rs1是远程记录集,设置为随机行。 rs2是本地变体,设置为具有相同主键的行。它们应该是相同的,因为我只是通过使用DoCmd.TransferDatabase

移动本地表来创建远程表

Debug.Print fld.Value返回09:46:00。 Debug.Print rs2.Fields(fld.NAME).Value也会在09:46:00返回。但是,比较没有通过。

奇怪的部分:

Debug.Print CDbl(fld.Value)返回0.406944444444444

Debug.Print CDbl(rs2.Fields(fld.NAME).Value)返回0.406944444444445

如何避免这些错误?我应该添加类型检查并检查具有一定精度的时间字段的相等性,还是有更简单的方法来避免这种情况?

1 个答案:

答案 0 :(得分:1)

使用 DateDiff 。完全出于这样的目的忽略浮点错误:

If DateDiff("s", fld.Value, rs2.Fields(fld.NAME).Value) <> 0 Then GoTo ReturnFalse