Lege zoekvelden niet mee opnemen

Status
Niet open voor verdere reacties.

rohenx

Gebruiker
Lid geworden
9 mei 2006
Berichten
6
Heb een query gemaakt (qry_zoeken) en heb een zoekformulier (frm_zoeken) met daaraan een macro (openquery). In deze query zit ook een Like "*" functie.

Ik krijg enkel een resultaat als ik alle zoekvelden invul. (bvb txtmodel - txtmerk - txtdatum > als ik txtmerk niet invul krijg ik geen zoekresultaat)

Hoe kan ik ervoor zorgen dat dit niet verplicht is?
 
Je zou dan bij alle drie de zoekcriteria iets met Like moeten doen. Bijv: Like "*" & [txtmodel] & "*". Als er dan geen zoekterm wordt opgegeven wordt alles gevonden.


Grtz,
 
Werkt niet

Ik heb dit op deze manier gedaan in mijn query ( de like* is op 3 velden van toepassing) maar dan moet ik ze ook allemaal invullen.

vb. query met volgende zoekvelden (telkens met like * enz.. in criteria)

merk
model
datum

ik heb een formulier met zelfde zoekvelden maar als ik één daarvan leeg laat dan vindt deze geen hits? hoe kan ik een leeg zoekveld ( bvb model) niet laten meetellen als ik wel op merk en datum zoek.
 
Plaats je query in SQL view eens hier op het forum. Dan kunnen we zie wat de oorzaak is.


Grtz,
 
hopla

SELECT Index.Eurotax, Index.Merk, Index.Model, Index.Zoekterm, Index.Waardebepaling, Index.Procentueel, Index.Absoluut, Index.Datum
FROM [Index]
WHERE (((Index.Merk) Like "*" & [Forms]![Zoeken]![txtMerk] & "*") AND ((Index.Model) Like "*" & [Forms]![Zoeken]![txtModel] & "*") AND ((Index.Zoekterm) Like "*" & [Forms]![Zoeken]![txtZoekterm] & "*") AND ((Index.Datum)>=[Forms]![Zoeken]![txtDatumvan] And (Index.Datum)<=[Forms]![Zoeken]![TxtDatumtot]));
 
rohenx zei:
Ik heb dit op deze manier gedaan in mijn query ( de like* is op 3 velden van toepassing) maar dan moet ik ze ook allemaal invullen.

Dit klopt helemaal!

Index.Zoekterm Like * betekent dat er niet gefilterd wordt (is eigenlijk hetzelfde als helemaal niets invullen voor dat veld in de WHERE clausule (dus ook de veldnaam niet!))
Index.Zoekterm Like <leeg> (oftewel niets invullen achter het woordje LIKE) wordt geinterpreteerd als Like "". Dit is een lege string (niet te verwarren met NULL). Een lege string is in de meeste gevallen een waarde, als die er dus niet in staat wordt het betreffende record niet geselecteerd.

Zelf schrijf ik in dit soort gevallen wat VBA code om de where clausule dynamisch samen te stellen en zet vervolgens in het zelfde stukje VBA de query even op de goede plaats. Dat werkt altijd en je kunt precies die zaken in de query stoppen die van belang zijn.

Off topic: Hoi Mark, ook de drukte in de Office sectie een beetje uit de weg gegaan?
 
Zoals Bartuls al meldt lijkt me inderdaad dat de query nu klopt. Werkt je applicatie nu goed of gaat het nog steeds mis?

Bartuls: Idd, veel te druk met mijn eigen projecten om daar de drukte bij te houden. Komt later hoop ik weer...

Grtz,
 
mmm

De query is idd juist maar het probleempje dat ik alle velden nog dien in te vullen kan ik via deze weg niet oplossen.
Ga via VBA moeten gaan .......:rolleyes:
 
Voor deze zoek query zou je geen VBA nodig moeten hebben. Heb je de mogelijkheid een (gedeelte van) de DB te plaatsen op het forum? Dan kijken we daar eens eventjes naar.

Grtz,
 
Met een (Index.Merk Like "*" & [Forms]![Zoeken]![txtMerk] & "*" AND Len(Index.Merk 7 "" ) > 0)
kan je de lege velden toch filteren.
(on the fly geschreven dus vast wel een syntax fout)
 
mmm

bedankt voor de reactie...maar begrijp de functie niet helemaal...sorry:o
 
Dit is een stukje uit jouw query met een toevoeging zodat de inhoud van het veld een lengte moet hebben die groter is dan 0....ergo niet leeg

....WHERE (Index.Merk Like "*" & [Forms]![Zoeken]![txtMerk] & "*" AND Len(Index.Merk 7 "" ) > 0) AND ....

Als je alle voorwaarden op- deze wijze aanpast komen er geen lege velden meer voor in je query resultaat.
(Len() geeft de lengte van een string of getal weer door & "" aan de inhoud vast te plakken voorkom je fouten door null or empty waarden)

Let wel op er wordt dus geen enkel leeg veld bij alle 4 de velden meer geaccepteerd.

Als je wel lege velden wilt accepteren bij geen zoek match dan moet je de AND tussen de velden wijzigen in OR

....WHERE (Index.Merk Like "*" & [Forms]![Zoeken]![txtMerk] & "*" AND Len(Index.Merk 7 "" ) > 0) OR ....
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan