2008-10-01 5 views
1

로 내 보고서에 몇 가지 공식을 가지고 있고, 내가 표현식 필드에 다음과 같이 할 0으로 divsion을 방지하기 위해!의 ReportViewer 사업부 제로

= IIF (필드 F1.Value <> 0, 필드 F2!의. 값/필드! F1.Value, 0)

일반적으로 정상적으로 작동하지만 F1과 F2가 모두 0이면 보고서에 "# 오류"가 표시되며 다음과 같은 경고 메시지가 나타납니다. 'textbox196'텍스트 상자에 오류가 있습니다. '0으로 나누려고했습니다.'

왜 그럴까요?

답변

1

이보다 예뻐 방법이있을 가지고 있지만,이 작업을해야합니다, 그러나

=IIF(Fields!F1.Value <> 0, Fields!F2.Value/
    IIF(Fields!F1.Value <> 0, Fields!F1.Value, 42), 0) 
+0

더러워 F2.Value)), 작동하지만 .. 왜 나는 단순히 쓸 수 없습니다!!! 그렇지 IF 을 필드 F1.Value <> 0 다음 필드 F2.Value/필드 F1.Value 끝내면CrystalReports .. 나는 한숨에서 떠나고 있습니다. – neslekkiM

3

IIF()는 단지 기능이며, 어떤 기능 모든 인수가 Fields!F2.Value/Fields!F1.Value을 포함하여 함수가 호출 전에 을 평가있다. 즉, Fields!F1.Value <> 0 조건에도 불구하고 0으로 나누려고합니다.

+0

아, 물론, VB를 기억하기 시작했습니다. 그러나이 문제는 어떤 종류의 해결책입니까? 아는 한 VBA 스 니펫을 표현식으로 입력 할 수 없습니까? 아니면 잘못 되었습니까? – neslekkiM

+0

VB9 (.Net 3.5)는 C 기반의 삼항 연산자 (?)처럼 작동하는 새로운 If() _operator_를 지원합니다. VB8 (.Net2.0)은 인라인 If/Else 구문을 지원합니다. 그러나 둘 중 하나가 ReportViewer와 함께 작동하지 않을 것이라고 생각합니다. –

+0

내가 잘못했을 수도 있지만 문제를 설명하지는 않습니다. neslekkiM의 일은 F1 == 0 일 때만 잘 작동하지만 * both *가 0 일 때가 아닙니다. 맞습니까? 플러스 조엘, 부서 표현은 neslekkiM이 쓴 것과 일치하지 않습니다. 그의 F1은 F2가 아니라 약수로 나타납니다. – cori

0

를 그 다음을 평가하지 않기 때문에 당신이 작동해야

if Fields!F1.Value <> 0 
then 
Fields!F2.Value/Fields!F1.Value 
else 0 

을 사용할 수 있습니다 "if"섹션이 거짓 인 경우.

+0

나는 받아 들인 대답에 대한 코멘트를 보았을 것이다. 아마도 이것은 지금 바뀌었을 지 모르지만, 나는 그 당시에 이것을 쓸 수 없었다. – neslekkiM