query leeg laten als aan geen enkele voorwaarde voldaan is

Status
Niet open voor verdere reacties.

8Leonie8

Gebruiker
Lid geworden
7 jul 2008
Berichten
61
Ik heb een formulier met daarin een subformulier (welke bestaat uit een query). De query in het subformulier wordt samengesteld op basis van de informatie uit het hoofdformulier. In het hoofdformulier staan een aantal velden als Naam, Adres, Plaats enz..

Stel in het hoofdformulier staat bij naam: Vries ingevuld, dan worden in het subformulier/query alle records getoond met Vries in de naam. Stel in het hoofdformulier staat bij adres: laan ingevuld, dan worden in het subformulier/query alle records getoond met 'laan' in het adres.

Tot zover werkt het helemaal goed. Maar wanneer er geen enkel veld ingevuld is, worden in het subformulier alle records uit de achterliggende tabel getoond. Is het ook mogelijk om ervoor te zorgen dat de query dan leeg is?

Gr leonie
 
Als je nu elke voorwaarde als volgt aanpakt: (maar een idee die in me opkomt ;)
Stel je hebt 3 inputvakken. (adres naam voornaam)
Teller = 0
if(nz(isnull(Adres)) then
teller = teller + 1
else
defilter
end if

if(nz(isnull(Naam)) then
teller = teller + 1
else
defilter
end if

if(nz(isnull(Voornaam)) then
teller = teller + 1
else
defilter
end if

if (teller = 3 ) then
show all records
end if
 
Sorry, beetje late reactie...

Het wordt nog wat ingewikkelder. Ik ben er nu achter gekomen dat wanneer 1 van de velden in de achterliggende tabel niet gevuld is, die record in de query niet getoond wordt. Nog even samenvattend:

Als ik in het formulier een zoekwoord intyp in een veld (bijvoorbeeld het veld 'Naam'), wordt er een selectiequery uitgevoerd die alle records waar het zoekwoord in de naam voorkomt selecteert. Ik heb dit gedaan door bij de criteria van de query in elk veld: [SQL]Like "*" & [Forms]![Zoek klant]![veldnaam] & "*" [/SQL]te zetten.

Het werkt goed, maar ik stuit op twee problemen:
- wanneer bijvoorbeeld van een klant het telefoonnummer niet ingevuld is, maar de overige gegevens zoals het adres wel, dan wordt deze niet in de query getoond als ik bijvoorbeeld op adres zoek. Hoe kan ik ervoor zorgen dat records met een leeg veld wel in de query getoond worden??
- wanneer er geen zoekwoord is ingevuld, wordt de volledige query getoond. Ik zou liever zien dat de query dan leeg is, kan dit?

gr leonie
 
Laatst bewerkt:
Probleem 1 heb ik op kunnen lossen door de sql aan te passen. Bij elk veld heb ik nu de voorwaarde aangepast naar:

((([tabel 1].veldnaam1) Like "*" & [Forms]![Zoek klant]![veldnaam1] & "*")
OR [Forms]![Zoek klant]![veldnaam1] Is Null )

Hierdoor wordt een record altijd getoond ook als 1 van de andere velden van die record leeg is. Hiermee voorkom ik dat een naam of adres niet gevonden wordt omdat bij die klant bijvoorbeeld het telefoonnummer niet bekend is.

Nu zou ik alleen nog graag willen dat wanneer er geen enkel veld in het formulier ingevuld is, de query ook leeg blijft (nu laat hij alle records zien wanneer geen van de velden ingevuld is).

Iemand een idee??

gr leonie
 
Normaal gesproken laat een qeury de records zien die je filtert. Als er niks is geselecteerd, krijg je dus alles te zien, zoals je al hebt gemerkt. Wat je wilt, is dus iets wat geen 'natuurlijk gedrag' is voor de query. Je kunt dat misschien simuleren door standaard op een veld een filter te maken waarvan je zeker weet dat het resultaat een lege recordset oplevert. Vervolgens verwijder je dit filter zodra er een goed filter wordt ingesteld.

Omdat je zo te zien met verschillende zoekvelden wilt kunnen filteren, denk ik niet dat je je huidige filtermethode zult kunnen blijven gebruiken. Je zult dus de filtering op de query moeten zetten m.b.v. VBA. Althans: dat zou ik doen. Je moet namelijk een filter verwijderen bij de instelling van een ander filter, en dat moet bij elk filtervak gebeuren.
Als iemand anders een oplossing weet met een vaste filtering, dan hou ik mij aanbevolen!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan