2017-12-06 6 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が満たされていなかったため)Qの部分を削除する方法がありますか?IFの文をもう一度書き直す必要がありますか?Q部分のみを再度書き直す必要がありますか?

私はCASEのようなものを使ってQが作成されているかどうかをチェックし、そうでない場合はその部分をスキップすることを考えていました。可能であればどうしたらいいですか?注意点としては

+0

if文の後にbeginを置き、現在のend文の後ろに挿入してください! – Dsm

+0

@Dsmしかし、条件「A」が満たされても、毎回実行するために2番目の「IF」が必要です。 'A'が満たされない場合、' Q'部分なしで実行される第2のIFが必要です。あなたが言うように 'BEGIN'と' END'を置くと、 'A'が満たされなくなるたびに、2番目の' IF'も実行されません。 – nikname

答えて

4

クイックと汚いやり方

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

、条件が単純ならば、あなたを維持しようとします。

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

これは私が探していたものです。バディーありがとう。 – nikname

+3

@nikname条件が実際にQが作成されたかどうかにかかわらず、私はむしろ '(割り当てられていない(Q)OR(Q.FieldByName( 'Example')。AsInteger = 1))'と一緒に行きます。それは条件Aを複製するのを避けます。ただそれをゼロに初期化することを確認する必要があります。 –

+0

私はすでに、条件Aが満たされていない場合にTRUEである 'ブール変数'を挿入してこの問題を解決しました。満足していれば、私のコードは次のようになります: 'booleanVariable:= Q.FieldByName( 'Example' ).AsInteger = 1'。私がここで直面している新しい問題は、 'Q.FieldByName( 'Example').AsInteger'には何もないとき、' NULL'値でさえありません。私の 'booleanVariable'は決して割り当てられません。 'Q.FieldByName( 'Example')。AsInteger'は、実行されるバックグラウンドの' SQL'が条件のため何も返さないため、空です。 – nikname

関連する問題