2017-12-06 16 views
2

IF 문에서 조건의 일부를 제거 할 수있는 방법이 필요한지 여부에 따라 다릅니다.경우에 따라 일부 조건 제거

IF A THEN 
Q := TQuery.Create(Application); 
IF B AND C AND D AND E AND Q.FieldByName('Example').AsInteger = 1 then 
BEGIN 
... 
END 

그래서 (내가하지 않았다의 내가 그것으로 일부 데이터를 가져온 TQuery를 생성 한 후 가정 해 봅시다 : 내 코드가 내 언어로 사용자 정의 함수와 프로 시저를 많이하기 때문에 다음 코드는 예입니다 코드의 해당 부분을 여기에 작성하십시오). Q이 작성되지 않았거나 (조건 A가 만족되지 않았기 때문에) 두 번째 IF 문에 Q 부분을 제거하는 방법이 있습니까? 아니면 Q 부분을 다시 사용하여 전체 IF 문을 다시 작성해야합니까?

CASE과 같은 것을 사용하여 Q이 생성되었는지 확인하고, 그렇지 않은 경우 문장의 해당 부분을 건너 뛰기로 생각했습니다. 가능하다면 어떻게해야합니까?

IF B AND C AND D AND E AND (NOT A OR Q.FieldByName('Example').AsInteger = 1) then 

+0

if 문 다음에 시작하고 현재 종료 문 뒤에 끝냅니다! – Dsm

+0

@Dsm 그러나 'A'조건이 충족 되더라도 매번 실행할 'IF'는 두 번째가 필요합니다. 'A'가 만족되지 않으면'Q' 부분없이'IF'가 실행되어야합니다. 그리고 말한대로'BEGIN'과'END'를 넣으면'A'가 만족되지 않을 때마다 두 번째'IF'도 실행되지 않을 것입니다. – nikname

답변

4

신속하고 더러운 방법 참고로, 귀하의 경우 조건을 간단하게 유지하려고합니다.

EvaluationRequested := A AND C ... 
QueryNeedsAval := NOT A OR ... 
if EvaluationRequested AND QueryNeedsAval then 
begin 
    ... 
end; 
+0

그게 내가 찾고 있던거야. 고마워. – nikname

+3

@nikname 조건이 실제로 Q가 만들어 졌는지 여부에 관계없이'(할당되지 않은 (Q) 또는 (Q.FieldByName ('Example') .AsInteger = 1))'와 같이 가고 싶습니다. 그것은 조건 A를 복제하는 것을 피합니다. 단지 그것을 초기화하지 말아야합니다. –

+0

조건 'A'가 만족되지 않으면'부울 변수'를 삽입하여이 문제를 이미 해결했습니다. 만족 스럽다면 내 코드는 다음과 같습니다 :'booleanVariable : = Q.FieldByName ('Example ') .AsInteger = 1'. 여기에서 직면 한 새로운 문제는'Q.FieldByName ('Example') .AsInteger'에도 'NULL'값이 없으면 my booleanVariable이 할당되지 않는다는 것입니다. 'Q.FieldByName ('Example'). AsInteger'는 실행되는 백그라운드'SQL'이 조건 때문에 아무 것도 반환하지 않기 때문에 비어 있습니다. – nikname