2017-12-06 3 views
2

Gibt es eine Möglichkeit, Teil der Bedingung in IF Anweisung zu entfernen, je nachdem, ob ich es brauche oder nicht. Weiter Code ist beispielsweise weil in meinem Code eine Menge von benutzerdefinierten Funktionen und Prozeduren in meiner Sprache gibt es:Entfernen Teil der Bedingung in einigen Fällen

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

So lassen Sie uns sagen, nach TQuery schaffen, die ich einige Daten in sie importiert haben (ich habe nicht schreibe diesen Teil des Codes hier). Gibt es eine Möglichkeit, Teil mit Q in der zweiten IF-Anweisung zu entfernen, wenn die Q nicht erstellt wurde (weil die Bedingung A wurde nicht erfüllt) oder muss ich die gesamte IF Anweisung wieder nur ohne Q Teil wringen?

Ich dachte mit etwas wie CASE zu überprüfen, ob Q erstellt wird und wenn es nicht ist, nur um diesen Teil des Satzes zu überspringen. Wenn es möglich ist, wie kann ich es überspringen?

+0

Setzen beginnen nach der if-Anweisung und enden nach der aktuellen Endanweisung! – Dsm

+0

@Dsm Aber ich brauche die zweite 'IF' um jedes Mal auszuführen, egal ob die Bedingung 'A' erfüllt wurde. Nur wenn "A" nicht erfüllt ist, muss der zweite "IF" ohne "Q" -Teil ausgeführt werden. Und wenn ich 'BEGIN' und' END' setze, wie Sie sagen, jedes Mal, wenn 'A' nicht erfüllt ist, würde das zweite' IF' auch nicht ausgeführt werden. – nikname

Antwort

4

Schnelle und schmutzige Art und Weise

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

Als Hinweis, versuchen Sie, wenn die Bedingungen einfacher zu halten.

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

Das ist, was ich gesucht habe. Danke, Kumpel. – nikname

+3

@nikname Wenn die Bedingung wirklich ist, ob Q erstellt wurde oder nicht, würde ich lieber mit 'gehen (nicht zugewiesen (Q) ODER (Q.FieldByName ('Beispiel'). AsInteger = 1))'. Das vermeidet, die Bedingung A zu duplizieren. Stellen Sie nur sicher, dass Sie es auf Null initialisieren. –

+0

Ich habe dieses Problem bereits behoben, indem ich eine 'boolesche Variable' eingefügt habe, die 'TRUE' ist, wenn die Bedingung' A' nicht erfüllt ist und wenn sie erfüllt ist, sieht mein Code so aus: 'booleanVariable: = Q.FieldByName ('Example') .AsInteger = 1'. Das neue Problem, mit dem ich es hier zu tun habe ist, dass, wenn es nichts in 'Q.FieldByName ('Example'). AsInteger', nicht einmal einen' NULL' Wert gibt, meine 'booleanVariable' niemals zugewiesen wird. 'Q.FieldByName ('Example'). AsInteger' ist leer, weil der Hintergrund' SQL', der ausgeführt wird, aufgrund seiner Bedingungen nichts zurückgibt. – nikname

Verwandte Themen