Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi if NOT in [..] (https://www.delphipraxis.net/189571-if-not-%5B-%5D.html)

rokli 25. Jun 2016 09:58

if NOT in [..]
 
Moin!

Ich möchte im IF eine Gruppe negieren. Konkret möchte ich wissen, ob ein Datenbankstatus inaktiv ist oder nicht.

Delphi-Quellcode:
   if Query1.State NOT IN [dsInActive] then Query1.Close;


Der Compiler meldet:
[dcc32 Fehler] FMain.pas(158): E2066 Operator oder Semikolon fehlt
[dcc32 Fehler] FMain.pas(158): E2015 Operator ist auf diesen Operandentyp nicht anwendbar

Ich könnte fragen, ob einer der anderen Status aktiv ist, aber eigentlich wollte ich nicht alle Status hinschreiben .. ich kann auch positiv abfragen und das Schließen der Query in den ELSE Zweig legen, aber das finde ich nicht schön.

Kann mir das jemand verraten warum das nicht geht?

Grüße
Rolf

nahpets 25. Jun 2016 10:00

AW: if NOT in [..]
 
Delphi-Quellcode:
 if NOT (Query1.State IN [dsInActive]) then Query1.Close;

Sir Rufo 25. Jun 2016 10:01

AW: if NOT in [..]
 
Delphi-Quellcode:
if not ( foo in bar )
then
  ...

rokli 25. Jun 2016 10:06

AW: if NOT in [..]
 
Das ging ja schnell! :-D

Hallo nahpets,

Zitat:

Zitat von nahpets (Beitrag 1341093)
Delphi-Quellcode:
 if NOT (Query1.State IN [dsInActive]) then Query1.Close;

das hatte ich auch probiert, geht aber leider nicht.


und hallo Sir Rufo,

Du kannst es einfach! :thumb: Funzt!

Danke und ein schönes WE!

Rolf

Sir Rufo 25. Jun 2016 10:11

AW: if NOT in [..]
 
Und das obwohl nahpets das Gleiche meinte wie ich ... nur ich war schreibfaul und habe es allgemein gehalten.

Konkret muss es so lauten, denn
Delphi-Quellcode:
Query1.State
ist das Set
Delphi-Quellcode:
if not ( dsInActive in Query1.State )
then
  ...

nahpets 25. Jun 2016 10:15

AW: if NOT in [..]
 
Jaja, das ist wieder mein typischer Fehler, zuerst mache ich das so:
Delphi-Quellcode:
 if NOT (Query1.State IN [dsInActive]) then Query1.Close;
und immer erst im zweiten Anlauf richtigrum:
Delphi-Quellcode:
 if NOT (dsInActive in Query1.State) then Query1.Close;
. Wann nur werde mir das merken?

Aber eigentlich müsste das hier doch auf viel einfache gehen:
Delphi-Quellcode:
if query.Active then query.close;

rokli 25. Jun 2016 10:26

AW: if NOT in [..]
 
ähm

Delphi-Quellcode:
   if NOT (dsInActive IN Query1.State) then Query1.Close;

wird bei mir aber nicht compiliert ... nur die erste Version war in Klammern dann ok.

@nahpets: da hast Du recht! (Query1.Active)

himitsu 27. Jun 2016 12:20

AW: if NOT in [..]
 
Damit du auch das Warum verstehst:

Es gibt eine Reihenfolge, in der Operatoren ausgewertet werden. (steht auch in der OH)
Die unären Operatoren ala NOT oder die "Vorzeichen" + und - haben die höchste Prioriotät und werden immer zuerst ausgewertet.

Somit macht der Compiler implizit ein
Delphi-Quellcode:
if (not dsInActive) in Query1.State then
daraus, was der Compiler natürlich nicht für richtig erachtet.

Schön wäre es da auch, wenn Pascal z.B. Doppeloperatoren (ein Operator aus mehreren Wörtern) ala
Delphi-Quellcode:
if dsInActive not in Query1.State then
unterstüzen würde, oder z.B. NAND und NOR.

rokli 27. Jun 2016 12:30

AW: if NOT in [..]
 
Danke!


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:01 Uhr.

Powered by vBulletin® Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2019 by Daniel R. Wolf