Abfragekriterium Ist Null und Ist Nicht Null anhand Bedingun

Moderator: ModerationP

Abfragekriterium Ist Null und Ist Nicht Null anhand Bedingun

Beitragvon Namewarnochfrei » 24. Aug 2021, 10:38

Hi folks,

ich hab in einer Abfrage folgendes vor.
Ich möchte für ein Fled folgendes Kriterium verwenden:

Wenn(fctTest()=1;Ist Null;Ist Nicht Null)

(Die Funktion fctTest() enthält einen Wert der durch Nutzerauswahl zustande kam, wenn dieser 1 ist, soll das Kriterium Ist Null Verwendung finden, ansonsten genau anders rum Ist Nicht Null)

Nur leider bringt er mir keine Datensätze. Ist Null oder Ist Nicht Null einzeln einzutragen bringt das gewünschte Ergebnis, aber ich will ja die Bedingung schalten.

Wieso erwartet Access dass schon wieder anders als es meiner Logik entspricht?

Wer kennt die richtige Syntax hierzu?

Danke
Namewarnochfrei
Namewarnochfrei
 

Re: Abfragekriterium Ist Null und Ist Nicht Null anhand Bedi

Beitragvon Mr.TM » 24. Aug 2021, 11:10

Hallo Namewarnochfrei,

ich bezweifele stark, dass das so funktioniert!

Also 1., "ist" funktioniert in "Wenn" nicht. In einer Wenn-Funktion schreibst du die Werte, die bei "Wahr" bzw "Falsch" ohne ist hinein.
2. Was soll Access bei dem Wert "nicht NULL" schreiben? "Nicht NULL" ist ja was. Nicht nichts muss ja was sein. NULL sagt ja nur, dass in dem Feld noch nie was drin stand.

Lösung: Arbeite doch einfach mit Zahlenwerten, z.B. 0 und 1.
Wenn(fctTest()=1;0;1)
Sollte der Feldtyp "Text" sein müssen die "Wahr-" und "Falsch-Werte" in Anführungszeichen stehen.

Vorteil: 0 und 1 lassen sich sehr einfach auswerten.
Zuletzt geändert von Mr.TM am 24. Aug 2021, 11:17, insgesamt 2-mal geändert.
OracleDB, Access 365 (deutsch), kein VBA erlaubt
Mr.TM
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 21
Registriert: 20. Aug 2021, 10:14

Re: Abfragekriterium Ist Null und Ist Nicht Null anhand Bedi

Beitragvon Gast » 24. Aug 2021, 11:11

Ich finde die versuchte Logik sehr verdreht.

Manchmal hilft es zu schildern, was man EIGENTLICH machen will.
Gast
 

Re: Abfragekriterium Ist Null und Ist Nicht Null anhand Bedi

Beitragvon Namewarnochfrei » 24. Aug 2021, 12:48

hach wie schön, die Maschine ist aslo nicht die einzige die hier den Kopf schüttelt.

Also: Benutzerformular. Über Kombibox wählt der Nutzer eine Option. Auf Kombinationsbox-Index Numero 2 läuft hiefür ein Zahlenwert mit den ich nach Aktualisierung in eine
Publicvariable schreiben lasse. Dieser Wert wird einer Funktion fctTest zugewiesen in einem Modul. Durch Kriteriumsvergabe in Abfrage erfolgt die Wertübergabe, dürfte gängiges Prozedere sein.

So nun ist es so wie beschrieben. Bei Optionsauswahl mit dem Indexwert 1 (der Wert der in fctTest also enthalten ist), soll für ein Feld in der Abfrage das Kriterium Ist Null gelten.
(Zeige alle Datensätze wo dieses Feld keinen Eintrag hat und das erreich ich eben nicht mit dem Kriterium 0/1 für Wahr/Falsch)

Falls der Nutzer die andere Option gewählt hat (Kombibox hat nur zwei Einträge zur Auswahl) sollen alle DAtensätze rauskommen wo es der umgekehrte Fall ist, also nur die die in dem Feld einen Eintrag haben (Ist Nicht Null)
Ich bekomme die jeweils entsprechenden Werte, wenn ich Ist Null oder Ist nicht Null als Solokriterium für das Feld eintrage.

Verwende ich aber die genannte Syntax, so wie ich sie mir denken würde, bekomm ich aber nix angezeigt bei Auswahl mit Indexwert 1. fctTest() hat auch Wert 1 drinne. Es gibt Datensätze wo das Feld Ist Null ist, klappt ja auch solo.
Kriteriumsangabe für das Feld =Wenn(fctTest()=1;Ist Null;Ist Nicht Null)

Ich weiß dass Access manche Dinge in seltsamer Form haben möchte, scheinbar hier etwas anders.
Weiß jemand wie Access das haben will oder wie ich das sonst schalten könnte?

Das wäre super.
Namewarnochfrei
Namewarnochfrei
 

Re: Abfragekriterium Ist Null und Ist Nicht Null anhand Bedi

Beitragvon Mr.TM » 24. Aug 2021, 13:13

OK, jetzt wird es etwas durchsichtiger. Dem entsprechend geht meine Antwort von oben etwas am Thema vorbei.

Was mich stört ist dieses "ist nicht NULL". Der mittlere Wert in einer Wenn-Funktion ist der Wert, der ausgegeben wird, wenn der Ausdruck davor wahr ist; der letzte Wert dem entsprechend, wenn der Ausdruck falsch ist.

Bedauerlicherweise kann ich dir dabei im Moment nicht weiterhelfen. Mal schauen ob mir dazu noch was einfällt.
OracleDB, Access 365 (deutsch), kein VBA erlaubt
Mr.TM
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 21
Registriert: 20. Aug 2021, 10:14

Re: Abfragekriterium Ist Null und Ist Nicht Null anhand Bedi

Beitragvon DerHoepp » 24. Aug 2021, 13:24

Moin,

kurze Verständnisfrage: Hat deine Tabelle einen Feldnamen "Ist", das du in einer Abfrage im Where-Clause auf NULL prüfen willst?
Also diese beiden unterschiedlichen Abfragen?
Code: Alles auswählen
SELECT ID, Bezeichnung, Soll, Ist FROM tbLeistungsdaten WHERE Ist IS NULL
und
SELECT ID, Bezeichnung, Soll, Ist FROM tbLeistungsdaten WHERE Ist IS NOT NULL


Viele Grüße
derHöpp
DerHoepp
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 9727
Registriert: 14. Mai 2013, 11:08

Re: Abfragekriterium Ist Null und Ist Nicht Null anhand Bedi

Beitragvon Namedernochfreiwar » 24. Aug 2021, 13:45

Gut in SQl gesprochen anhand eines vereinfachten Beispiels, natürlich hat die Abfrage in echt mehr Felder.:

Das was funktioniert solo:

Code: Alles auswählen
SELECT qry_test.Anlage
FROM qry_test
WHERE (((qry_test.Anlage) Is Null));


Auch der umgekehrte Fall funktioniert:
Code: Alles auswählen
SELECT qry_test.Anlage
FROM qry_test
WHERE (((qry_test.Anlage) Is Null));


Was nicht geht ist das als Fallunterscheidung zu schalten, anhand der Nutzerauswahl
über genannte Wertspeicherung über Funktion tralala etc. wie beschrieben.
(Auswahl 1 aus Kombibox bitte Leerwerte ausgeben, Auswahl 2 bitte alle nicht Leerwerte ausgeben)

Code: Alles auswählen
SELECT qry_test.Anlage
FROM qry_test
WHERE (((qry_test.Anlage)=IIf(fcttest()=1,(qry_test.Anlage) Is Null,(qry_test.Anlage) Is Not Null)));


Was möchte Access hier haben? Kann ja sein, dass Besonderheiten in der Syntax zu berücksichtigen sind (Sonderzeichen etc., damit er das Null oder IsNull aus der Bedingung als Kriterium nimmt)
Gruß vom Namendernochfreiwar
Namedernochfreiwar
 

Re: Abfragekriterium Ist Null und Ist Nicht Null anhand Bedi

Beitragvon Beaker s.a. » 24. Aug 2021, 14:14

Hallo,
Luftcode:
Code: Alles auswählen
Private Sub DeinKombi_AfterUpdate()
    Dim s As String
    Dim sSQL
    If Me.DeinKombi = 1 Then
        s = "Is Null"
    Else
        s = "Is Not Null"
    End If
    sSQL = _
          "SELECT qry_test.Anlage " _
        & "FROM qry_test " _
        & "WHERE qry_test.Anlage " & s
    Debug.Print sSQL
End Sub


gruss ekkehard
Ereignisorientierte Programmierung:
Alles, was geschieht, geschieht.
Alles, was während seines Geschehens etwas anderes geschehen
läßt, läßt etwas anderes geschehen.
Alles, was sich selbst im Zuge seines Geschehens erneut geschehen
läßt, geschieht erneut.
Beaker s.a.
Im Profil kannst Du frei den Rang ändern
 
Beiträge: 1205
Registriert: 14. Jul 2012, 21:56
Wohnort: Bremen

Re: Abfragekriterium Ist Null und Ist Nicht Null anhand Bedi

Beitragvon Namedernochfreiwar » 24. Aug 2021, 14:23

Hallo Beaker,

in die Richtung hab ich auch schon gedacht, würde das Kriterium aber eher über die Querydefinition setzen lassen, als die komplette Abfrage jedesmal über den Code erzeugen zu lassen.
Dann muss ich wohl doch noch einmal die Syntax raussuchen, wie das mit Querydefinition nochmal genau war. Im Kopf hab ich das jetzt auch nicht. :(

Gruß
vom Namendernochfreiwar
Namedernochfreiwar
 

Re: Abfragekriterium Ist Null und Ist Nicht Null anhand Bedi

Beitragvon Namedernochfreiwar » 24. Aug 2021, 15:49

Hey folks,

nach einiger Bastelage stellt sich heraus, dass doch keine Fallunterscheidung von Nöten ist. :roll:

Meine letzte Idee hierzu war jetzt:

Code: Alles auswählen
  Dim q As DAO.QueryDef
    Dim s As String
   
    If Forms!frm_tralala= 1 Then
        s = "Is Null"
    Else
        s = "Is Not Null"
    End If

        Set q = CurrentDb.QueryDefs("qry_test")
        q.Parameters("Anlage") = s
        q.Close
        Set q = Nothing


Auch Luftcode, der nun nicht mher zum Einsatz kommt.
Vielleicht kann mir aber noch jemand abschliessend sagen, ob dies der einzig mögliche Ansatz war
oder ich einfach nur einen Syntaxfehler/Logikfehler in der Abfragebedingung drin hatte.
Wäre ja generell nice to know.

Dank vom Namendernochfreiwar
Namedernochfreiwar
 

Re: Abfragekriterium Ist Null und Ist Nicht Null anhand Bedi

Beitragvon Namedernochfreiwar » 24. Aug 2021, 15:58

P.s. jetzt wo ich das so sehe, dass s = "Is Null" und so: Ich hatte versucht ihm das in der Abfrage in Anführungszeichen zu verkaufen. Klar Datentypkonflikt ist ja kein Text, aber zur Auflösung der beiden enthaltenen Kriterien dacht ich.
Aber wenn ich das hier so sehe, ich weiß ja nicht vielleicht wollte er es auch so haben: Wenn(fctTest()=1;""Ist Null"";""Ist Nicht Null""). Aber ich will an meiner Schaltung jetzt nichts mehr versehentlich kaputtbasteln, daher probier
ich jetzt nicht weiter. Sieht komisch aus, aber man weiß ja nie, ich werd das mal im Auge behalten. In VBA ist ja manchmal auch so mit "'" & Variable & "'". Irgend so ein Zeichensetzungsmist vermute ich mal.
Namedernochfreiwar
 

Re: Abfragekriterium Ist Null und Ist Nicht Null anhand Bedi

Beitragvon Bitsqueezer » 24. Aug 2021, 16:08

Hallo,

nee, so geht's natürlich nicht!

Du kannst nicht mit IIf einen Teil des SQL-Textes als Ergebnis liefern. Darüber hinaus auch noch mit "=", wenn es funktionieren würde, wäre das Ergebnis:

Code: Alles auswählen
WHERE qry_test.Anlage = Is NULL


Also totaler Kokolores und hat mit Logik nichts zu tun.

Was geht ist:

Code: Alles auswählen
WHERE 1 = IIf(fcttest() = 1, Iif(qry_test.Anlage IS NULL, 1, 0), IIf(qry_test.Anlage IS NOT NULL, 1, 0))


Gruß

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

Re: Abfragekriterium Ist Null und Ist Nicht Null anhand Bedi

Beitragvon Namedernochfreiwar » 24. Aug 2021, 16:15

Super vielen Dank Bitsqueezer, da wär ich ja nie drauf gekommen.
Hat das irgendwer wo dokumentiert? Das sieht ja ganz schön special aus von der Syntax her.
Werd ich mal bei Gelegenheit ausprobieren.
Namedernochfreiwar
 

Re: Abfragekriterium Ist Null und Ist Nicht Null anhand Bedi

Beitragvon ComputerVersteher » 24. Aug 2021, 16:18

Hi,

Code: Alles auswählen
WHERE IIf(fcttest() = 1, qry_test.Anlage Is Null, qry_test.Anlage Is Not Null)
scheint mir einfacher ;)

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, 16:41

Hallo CV,

schöner kann ja jeder... :lol:

Du hast natürlich vollkommen recht, einfacher und eleganter...;)

Gruß

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

Nächste

Zurück zu Access Forum (provisorisch)

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 13 Gäste