Toon posts:

[Access] NULL waarde in query

Pagina: 1
Acties:
  • 1.506 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Mijn vraag is hetzelfde als in dit topic:

Null waarde niet meenemen in query

Probleem is:

Bepaalde velden in de records kunnen & mogen leeg zijn. Als ik 1 veld opgeef en in dit record is er 1 veld wat leeg is, dan wordt er niets gevonden. Mijn query zoekt op bijna alle velden. Dus als ik zoek op 1 veld en de rest van de velden is wel ingevuld dan vind hij het wel, maar als ik maar 1 veld is wat leeg is dan vind ie niks.

hieronder de query in SQL:

Link naar .txt bestandje omdat forum layout anders vern**kt wordt

edit:
Layout van code.txt bestand aangepast, zodat deze beter leesbaar is


Ken anybody help me :'(

[ Voor 7% gewijzigd door Verwijderd op 14-06-2004 14:58 ]


Verwijderd

Je kan de OR-delen weg laten.
col LIKE '*' > alles
en col LIKE 'abc' komt overeen met col = 'abc'.
Pas wel op voor wildcards in de col-inhoud, bijvoorbeeld 'ab*'!

Als in je expressie ergens een NULL waarde uitkomt, is alles NULL! Pas ook op voor numerieke kolommen. Gebruik ook de NZ() functie.

[ Voor 39% gewijzigd door Verwijderd op 14-06-2004 10:29 ]


Verwijderd

Topicstarter
Ok heb de functie NZ geprobeerd maar ik krijg m niet goed qua syntax. die > moet zeker een = wezen? en die ' moeten dan " zijn, tenminste dat maakt Access er van.

Ik heb t probleem niet kunnen verhelpen, helaas.

Is er geen commando :7 of functie waarbij criteria buiten beschouwing wordt gelaten?

Heb nu dus (verNederlandst):

ALS invoervak IsNull, DAN zoek op Alles ('*')
Als in je expressie ergens een NULL waarde uitkomt, is alles NULL! Pas ook op voor numerieke kolommen.
Wat bedoel je hiermee? (beide regels) |:(

  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

De where voorwaarden worden stuk voor stuk geevalueerd tot booleans. Even ervan uitgaande dat je een match wilt hebben op alle ingevulde velden in je formulier dan kun je het dus als volgt inkorten en overzichtelijker maken:
code:
1
2
3
4
5
WHERE
       IIF(ISNULL(invoervak1), TRUE, veld1 = invoervak1) AND
       IIF(ISNULL(invoervak2), TRUE, veld2 = invoervak2) .....
of:
       (ISNULL(invoervak1) OR (veld1=invoervak1)) AND .... 'etc

[ Voor 9% gewijzigd door Lustucru op 14-06-2004 23:47 ]

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


Verwijderd

Topicstarter
Ik snap je voorwaarden niet helemaal:

Als een invoervak leeg is, dan krijgt het veld toch de waarde van het invoervak. Ik weet ook niet precies wat je met Veld1 en Veld2 bedoelt. Zou het kunnen dat je hiermee de velden in de query bedoelt?

Ik snap niet waarom deze code niet werkt:

code:
1
 Like IIf(IsNull([Forms]![VP_zoeken]![Lijnnummer]),'*',[Forms]![VP_zoeken]![Lijnnummer]))


syntax is:
code:
1
 IIf(expr, truepart, falsepart)


Dan zou je toch denken, alsie leeg is, zoektie op '*' - wat dus alles kan zijn - en alsie niet leeg is gebruikt hij de waarde uit het invoervak. Wat jij zeg met booleans (Niesje), waarom zouden ze allemaal NULL worden (tjiba)? :?

  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Het idee: als het invoervak NULL is, dan wordt er helemaal niets meer vergeleken, maar stomweg de waarde TRUE geretourneerd; pas als invoervak <>NULL is, is het zinvol wat te vergelijken. :) Veld1...veldn zijn idd de velden in je query die corresponderen met de invoervakken.

[b] de syntax is correct, maar ik heb nog niet de aanvechting gehad om je hele querystring te debuggen. Een beetje onoverzichtelijk is ie wel, en een haakje op de verkeerde plaats maakt nogal wat uit. :|

[c] Eerlijk gezegd zou ik de query zelf opbouwen in VBA, waarbij je de invoervakken langs loopt en als het invoervak niet leeg is, de juiste voorwaarde toevoegt aan de query. :+

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


Verwijderd

Topicstarter
Ben nog niet zo goed in VBA om de waarde wel/niet in de query te laten opnemen, dat IF statement kan ik verder wel denk.

Heb net zitten testen met jouw code:

code:
1
2
3
 Like IIf(IsNull(Forms!VP_zoeken!Lijnnummer),True,Veiligheidspunten.Lijnnummer=Forms!VP_zoeken!Lijnnummer)) 
en
Like IIf(IsNull(Forms!VP_zoeken!Lijnnummer),True,(Veiligheidspunten.Lijnnummer)=Forms!VP_zoeken!Lijnnummer))


Omdat hij "Veiligheidspunten.Lijnnummer" achter WHERE tussen haakjes zet (zie naar query link in startpost) heb ik deze als eerste geprobeerd, daarna zonder haakjes, maakt niets uit. Hij vind nu al1 wat als je beide criteria ingeeft en deze overeenkomen met een record.

[ Voor 4% gewijzigd door Verwijderd op 14-06-2004 14:53 ]


Verwijderd

Topicstarter
Ben er reeds achter waarom hij ze niet weergeeft!!

code:
1
WHERE (((Veiligheidspunten.[Lijn onderdeel]) Like "*"));


Als criteria geeft alleen records weer waarbij kolom tenminste 1 karakter bevat.

Ik kan natuurlijk als standaardwaarde een spatie doen, maar bij invoer van records moet je dan eerst weer die spatie verwijderen. Hey, goed id van mezelf, dat moet te doen zijn :*)

Opgelost mensen, bedankt voor de hulp, ik ga ff testen of die de spaties dus wel pakt en zoniet, dan doe ik alsnog beroep op de kennis van GoT...

  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Verwijderd schreef op 14 juni 2004 @ 14:52:
[knip]

Heb net zitten testen met jouw code:

code:
1
2
3
 Like IIf(IsNull(Forms!VP_zoeken!Lijnnummer),True,Veiligheidspunten.Lijnnummer=Forms!VP_zoeken!Lijnnummer)) 
en
Like IIf(IsNull(Forms!VP_zoeken!Lijnnummer),True,(Veiligheidspunten.Lijnnummer)=Forms!VP_zoeken!Lijnnummer))


[knip]
Maar dit is niet wat ik tikte 8)7. Kijk nog even goed naar de oorspronkelijke post ajb: géén LIKE of wat dan ook ervóór |:(, nu maak je er iets van als:
where veld=waar, en tsja, dat werkt niet.

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


Verwijderd

Ik geef ook de voorkeur aan Niesje's [c] aanpak, maar ik heb de volgende query getest en het werkte! Voor [par1] moet je je Form-veld invullen.

SELECT Tabel1.ID, Tabel1.Opmerking
FROM Tabel1
WHERE ((Tabel1.Opmerking Like nz([par1],"")) OR ([par1] Is Null));

[ Voor 10% gewijzigd door Verwijderd op 15-06-2004 10:43 ]


Verwijderd

Topicstarter
Bedankt!!

Hij werkt idd erg goed, "probleem" is wel dat als ik hem via SQL invoer en dan naar Ontwerpweergave ga, Access t niet aan kan om hem te converteren. maar hij werkt ook als ik hem in SQL laat staan!!

Hier resultaat van query: Query

als je naar ontwerpweergave gaat vertaald Access, dit SQL naar eigen code en dit zal er ongeveer zo uit zien (gebaseerd op andere tabel met 4 kolommen): Afbeelding

Tjiba, bedankt jongen!

Nu nog iets anders

Ik wil een query laten uitvoeren , hieraan een record count gekoppeld en het aantal gevonden record bij laten weergeven in een veld op het formulier waar ik het criteria van hetzelfde query ingeef.

Dus: selecteer waarden, run query, geeft getal weer in veld, afhankelijk van waarde die ik selecteer in het formulier (query haalt zijn waarden uit het formulier)

Het is me gelukt met een enkele ingave, i.c.m. Dlookup
code:
1
2
AfdelingWaarde = DLookup("Count([ID])", "Lijnen", "[Afdeling] = '" & Me!Afdeling.Value & "'")
AfdelingAantal.Value = AfdelingWaarde


Dit is echter maar voor 1 voorwaarde en niet een query. Kunnen jullie me op een id brengen, bijvoorbeeld resultaatwaarde van die query (recordaantal bij geselecteerd criteria) opslaan in VB. Ik had als iets gelezen van VB en daarin docmd.runsql ofzo, dat ga ik ff uitzoeken iig.

alvast bedankt
Pagina: 1