Abfragekriterium Ist Null und Ist Nicht Null anhand Bedingun

Moderator: ModerationP

Re: Abfragekriterium Ist Null und Ist Nicht Null anhand Bedi

Beitragvon Namedernochfreiwar » 24. Aug 2021, 17:32

Aber sagt mal Jungs, führt das nicht wieder zu der Ausgangssitutaion in der Entwurfsansicht die ich Eingangs für das Feld hatte: Wenn(fctTest()=1;Ist Null;Ist Nicht Null)
Wo jeder hier erstmal die Augen gerunzelt hat, was das nun sein soll und was ich verrücktes mach?

Aber gut dass wir mal drüber gesprochen haben.
Seid ihr auch sicher, dass das in der Praxis läuft?
Hatte nicht den Eindruck, aber ich bastel da jetzt auch nicht mehr groß dran rum, da ich die Fallunterscheidung doch nicht benötige.

Danke trotzdem
Namedernochfreiwar
Namedernochfreiwar
 

Re: Abfragekriterium Ist Null und Ist Nicht Null anhand Bedi

Beitragvon ComputerVersteher » 24. Aug 2021, 17:51

Namedernochfreiwar hat geschrieben:führt das nicht wieder zu der Ausgangssitutaion in der Entwurfsansicht die ich Eingangs für das Feld hatte: Wenn(fctTest()=1;Ist Null;Ist Nicht Null)
Schau's Dir doch mal in der Entwurfsansicht an und lies nochmal Bitsqueezers erste Antwort.

Gruß CV
"Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."
Benutzeravatar
ComputerVersteher
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 533
Registriert: 23. Jul 2016, 18:17

Re: Abfragekriterium Ist Null und Ist Nicht Null anhand Bedi

Beitragvon Bitsqueezer » 24. Aug 2021, 19:21

Hallo,

Du siehst den Unterschied immer noch nicht?

"WHERE" dient einzig und allein dazu, auf True oder False zu testen. Alles was danach kommt, muß zusammen in True oder False münden. Wenn True, ist der Datensatz im Ergebnis, sonst nicht.

Nimm doch mal ein Beispiel mit "=".

Du versuchst:

Code: Alles auswählen
Wenn(fctTest()=1;= 4;= 27)


Was soll das sein?

Da kommt kein True oder False raus. "= 4" ist doch kein Ausdruck, der auswertbar ist.

Was Du willst ist, daß Du einmal "Anlage Is Null" testest und einmal "Anlage Is Not Null". Aber Du versuchst, nur "Is Null" oder "Is Not Null" zurückzugeben, um es dann mit dem vorderen Teil zu verbinden, und das machst Du dann auch noch mit "=". Als ob Du SQL-Text von IIf zurückerhalten könntest, den Du einfach "hintendranklebst". Und mit dem "=" käme, sofern das ginge, nicht mal ein sinnvolles Ergebnis dabei raus, wie oben bereits geschrieben.

Das zuletzt von CV verbesserte IIf-Konstrukt dagegen prüft erst, ob die Funktion 1 oder nicht 1 zurückgibt. Wenn es 1 ist, wird der erste Ausdruck ausgewertet, also "Anlage Is Null" - das ist ein auswertbarer Ausdruck, der sich auf den aktuellen Datensatz bezieht. Der gibt dann entweder True oder False zurück. Und wenn Deine Funktion etwas anderes als 1 zurückgibt, wird der andere Ausdruck ausgewertet, also "Anlage Is Not Null", wieder mit entweder True oder False. Und WHERE lächelt und ist glücklich über sein True oder False.

Willst Du wirklich sagen, das sei das gleiche.....?

Gruß

Christian
Bitsqueezer
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 8465
Registriert: 21. Jun 2007, 12:17

Re: Abfragekriterium Ist Null und Ist Nicht Null anhand Bedi

Beitragvon knobbi38 » 24. Aug 2021, 22:44

Hallo,

ComputerVersteher hat geschrieben:
Code: Alles auswählen
WHERE IIf(fcttest() = 1, qry_test.Anlage Is Null, qry_test.Anlage Is Not Null)

eigentlich würde man so etwas doch einfach mit etwas boolescher Logik lösen
Code: Alles auswählen
Where (fctTest = 1 and Anlage is Null) or (fctTest = 0 and Anlage is not null)

oder habe ich da etwas übersehen?

Gruß Ulrich
knobbi38
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 3451
Registriert: 02. Jul 2015, 14:23

Re: Abfragekriterium Ist Null und Ist Nicht Null anhand Bedi

Beitragvon Bitsqueezer » 25. Aug 2021, 00:15

Hallo,

kann man natürlich auch so machen. Wobei hier allerdings der gesamte Ausdruck ausgewertet werden müßte, bei IIf nur zwei. Aber der Unterschied dürfte marginal sein, wahrscheinlich sogar trotzdem besser, weil es so kein IIf braucht, was ja kein SQL ist.

Gruß

Christian
Bitsqueezer
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 8465
Registriert: 21. Jun 2007, 12:17

Re: Abfragekriterium Ist Null und Ist Nicht Null anhand Bedi

Beitragvon Gast » 25. Aug 2021, 08:20

IIf ... was ja kein SQL ist

Michael Zimmermann spricht bereits 2005 in seinem AEK-Script zu Abfrageperformance davon, dass es in Jet-SQL ein eingebautes IIf gibt, zu unterscheiden von jenem in VBA.

Persönlich würde ich das in Abfragekriterien eher nicht einsetzen. Wenn man schon VBA-Funktionalität (Funktion) einsetzt, kann man auch gleich wie von ekkehard gezeigt den SQL-String dynamisch zusammensetzen und somit nur genau das Kriterium abfragen, was man benötigt. Der "Schaden" durch einen nicht genutzten vorhandenen Ablaufplan der gespeicherten Abfrage ist sehr wahrscheinlich unbemerk- und messbar.

Bei einer möglichen Performancebetrachtung würde man zwecks Indexnutzung(?) auf ein "NOT NULL" verzichten und bei einem Stringfeld etwas wie " Anlage > '' " verwenden.
Gast
 

Vorherige

Zurück zu Access Forum (provisorisch)

Wer ist online?

Mitglieder in diesem Forum: knobbi38 und 2 Gäste