2011-03-11 98 views
1

我使用下面的代碼來比較兩個記錄:訪問字段相同但不相等?

For i = 1 To (recordsetA.Fields.Count - 1) 
    If recordsetA.Fields(i).Value <> recordsetB.Fields(i).Value Then 
     stringFieldList = stringFieldList & ", " & recordsetA.Fields(i).Name 
    End If 
Next i 

然而在stringFieldList有幾個具有相同的值(如1339.5)字段。爲什麼?

+0

首先,它們是什麼值?其次,你是否考慮過尾部空間的處理?尾隨空格的字段在數據庫中通常相等,但在C#或其他語言中不相等。 – Ben 2011-03-11 13:09:10

+1

只是爲了澄清:(1)你的意思是「幾個字段的名稱出現在stringFieldList中,但是兩個記錄集中的值是相同的」? (2)你怎麼知道它們是一樣的?我的意思是,你是否已經使他們眼花繚亂,或者你是否仔細檢查過你的代碼中的字符,或者是什麼? – 2011-03-11 13:09:12

+0

也考慮空值。 – Fionnuala 2011-03-11 13:16:12

回答

3

由於它聽起來像處理雙數據類型,所以測試的正確方法是設置限制,然後測試絕對差異。您還需要考慮處理空值。

Const epsilon as double = 0.00001 

If Abs(recordsetA.Fields(i).Value - recordsetB.Fields(i).Value) < epsilon Then 
'do stuff here 
End If 
+2

確實。在高位小數位數(_very_小差異)中雙數可以不相等,而在顯示的表示中出現相等。 – RolandTumble 2011-03-11 18:24:18