2010-08-11 4 views
0

나는 아주 간단한 대답을 가지고 있을지도 모르지만 아직 해결책을 찾지 못했습니다. 다음은 예입니다 :Access-VBA : 함수에 누락 된 값이 있으면 빈 결과가 표시됩니까?

Public Function abc(var_1 As Variant) As Single 
abc = 2 * var_1 
End Function 

은 내가 Access 쿼리에서이 함수를 호출합니다. 'var_1'값은 숫자 (단일) 데이터 필드에서 가져온 값입니다. 문제점 : var_1 값 중 일부가 비어 있거나 누락되었습니다. 그 값에 대해서는 함수의 결과가 비어 있어야하지만 지금은 '0'입니다.

은 이미 많은 것들을 시도했지만 아무것도 작동하지 않습니다. 빈 값에 대한 결과는 항상 '0'이며 비어 있지 않습니다. 여기 하나 시도 :

If IsNull(var_1) Then 
     abc = Empty 
     Exit Function 
End If 

작동하지 않았습니다.

이 문제에 대한 어떤 도움은 매우 극명하게 될 것이다. :)

편집 :

답변 해 주셔서 감사합니다. 이전에 variant를 반환하려고 시도했지만 빈 필드를 반환했습니다. 그러나 계산 된 필드는 텍스트가 아닌 숫자로 작동해야하므로이 솔루션은 저에게 적합하지 않습니다. 나는 Beth의 답을 사용하여 끝내었지만, 내가 원하는 것보다 더 많은 일이있다. VBA에서

IIF(IsNull(X)=False;abc(X)) 

abc :

Public Function abc(var_1 As Single) As Single 
abc = 2 * var_1 
End Function 
+1

함수가 호출 사방에 그것을해야 할 것이다 있지만. 'Variant'를 반환하지 않으면'Empty' 값을 얻지 못합니다. –

+0

빈 <> null이라는 것은 주목할 가치가 있습니다. 일반적으로 데이터베이스 설정에서 Null over Empty를 사용합니다. – Oorang

답변

2

변경 기능은 다음과 같은 것을 찾는하며 SQL에서 함수를 호출) .

Public Function abc(var_1 As Variant) As Variant 
    If IsNumeric(var_1) Then 
     abc = 2 * var_1 
    Else 
     abc = Null 
    End If 
End Function 

나는 당신이하려고 한 것처럼 하나의 null을 반환 할 수 있다고 생각하지 않습니다.

+0

이 코드에는 몇 가지 부작용이있을 수 있습니다. Null Propagation 2 * Null = Null의 경이로움 덕택입니다. 따라서 널 (NULL)을 리턴하기 위해 널 (null)을 테스트 할 필요가 없습니다. 그러나 당신은 여기에서 null을 테스트하지 않습니다. 당신은 수리를 테스트하고 있습니다. 따라서 숫자가 아닌 문자열 값이 발생하면 일반적인 오류 대신 null이 반환됩니다. 이것은 "더티 데이터"의 감지 (및 가능한 복구)로 이어지는 오류를 억제하는 효과가 있습니다. 정말로 nullable 유형을 사용하고 있는지 확인해야합니다. 나는 IsNumeric 테스트에 신경 쓰지 않을 것이다. 그냥 내 2 ¢ :) +1 nullable 형식에 대한 비록. – Oorang

+0

그럼,'abc = 2 * var_1'로 쓰고 테스트에 대해서 전혀 걱정하지 않겠습니까? – Buggabill

0

또는 테스트 기능보다 높은 수준에서 널 (null)에 대한, 당신은 당신이 함수에서`Variant``Single`을하지 반환하고

+0

죄송합니다. 베스, 방금 한 가지 대답 만 받아 들일 수있는 것으로 나타났습니다. Buggabill에서 하나를 선택했습니다. 아마도 같은 문제가있는 다른 사람들에게 더 적합 할 것이기 때문입니다. – donodarazao

관련 문제