2011-03-11 4 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

첫째, 값은 무엇입니까? 두 번째 당신은 후행 공백의 처리를 고려 했습니까? 후행 공백이있는 필드는 일반적으로 DB 내에서는 동일하지만 C# 또는 다른 언어에서는 동일하지 않습니다. – Ben

+1

명확히하기 위해 : (1) "stringFieldList에 이름이 있지만 두 레코드 세트의 값이 같은 두 개의 필드"를 의미합니까? (2) 그들이 똑같은 것을 어떻게 알 수 있습니까? 내 말은, 당신은 그저 눈을 뜨게했는지, 아니면 코드에서 성격에 따라 성격을주의 깊게 확인했는지, 아니면 무엇을 했습니까? –

+0

nulls도 고려하십시오. – Fionnuala

답변

3

이중 데이터 유형을 다루는 것처럼 들리므로 적절한 테스트 방법은 한계를 설정 한 다음 절대 차이를 테스트하는 것입니다. null 값 처리에 대해서도 고려해야합니다.

Const epsilon as double = 0.00001 

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

실제로. Doubles는 고위 소수점 자리에서 비 동일 할 수 있지만 (매우 작은 차이), 표시된 표현에서 동일하게 나타납니다. – RolandTumble