AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

if NOT in [..]

Ein Thema von rokli · begonnen am 25. Jun 2016 · letzter Beitrag vom 27. Jun 2016
Antwort Antwort
rokli

Registriert seit: 21. Mär 2009
Ort: Rödinghausen
301 Beiträge
 
Delphi 10.4 Sydney
 
#1

if NOT in [..]

  Alt 25. Jun 2016, 10:58
Moin!

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

   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
Rolf
wenn nicht anders angegeben, schreibe ich zu D7, XE2 und MS SQL - ansonsten fragen Sie ihren Administrator oder einen Operator. Update 06/2020: Delphi 10.4 Sydney
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#2

AW: if NOT in [..]

  Alt 25. Jun 2016, 11:00
 if NOT (Query1.State IN [dsInActive]) then Query1.Close;

Geändert von nahpets (25. Jun 2016 um 11:02 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: if NOT in [..]

  Alt 25. Jun 2016, 11:01
Delphi-Quellcode:
if not ( foo in bar )
then
  ...
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
rokli

Registriert seit: 21. Mär 2009
Ort: Rödinghausen
301 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: if NOT in [..]

  Alt 25. Jun 2016, 11:06
Das ging ja schnell!

Hallo nahpets,

 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! Funzt!

Danke und ein schönes WE!

Rolf
Rolf
wenn nicht anders angegeben, schreibe ich zu D7, XE2 und MS SQL - ansonsten fragen Sie ihren Administrator oder einen Operator. Update 06/2020: Delphi 10.4 Sydney
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

AW: if NOT in [..]

  Alt 25. Jun 2016, 11:11
Und das obwohl nahpets das Gleiche meinte wie ich ... nur ich war schreibfaul und habe es allgemein gehalten.

Konkret muss es so lauten, denn Query1.State ist das Set
Delphi-Quellcode:
if not ( dsInActive in Query1.State )
then
  ...
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#6

AW: if NOT in [..]

  Alt 25. Jun 2016, 11:15
Jaja, das ist wieder mein typischer Fehler, zuerst mache ich das so: if NOT (Query1.State IN [dsInActive]) then Query1.Close; und immer erst im zweiten Anlauf richtigrum: 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:if query.Active then query.close;
  Mit Zitat antworten Zitat
rokli

Registriert seit: 21. Mär 2009
Ort: Rödinghausen
301 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: if NOT in [..]

  Alt 25. Jun 2016, 11:26
ähm

   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)
Rolf
wenn nicht anders angegeben, schreibe ich zu D7, XE2 und MS SQL - ansonsten fragen Sie ihren Administrator oder einen Operator. Update 06/2020: Delphi 10.4 Sydney
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.088 Beiträge
 
Delphi 12 Athens
 
#8

AW: if NOT in [..]

  Alt 27. Jun 2016, 13:20
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 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 if dsInActive not in Query1.State then unterstüzen würde, oder z.B. NAND und NOR.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
rokli

Registriert seit: 21. Mär 2009
Ort: Rödinghausen
301 Beiträge
 
Delphi 10.4 Sydney
 
#9

AW: if NOT in [..]

  Alt 27. Jun 2016, 13:30
Danke!
Rolf
wenn nicht anders angegeben, schreibe ich zu D7, XE2 und MS SQL - ansonsten fragen Sie ihren Administrator oder einen Operator. Update 06/2020: Delphi 10.4 Sydney
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:14 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz