Query van leeg veld combobox

Status
Niet open voor verdere reacties.

Orcaa

Gebruiker
Lid geworden
1 nov 2010
Berichten
125
Heb een formulier met 3 comboboxen
en heb een query waarbij de waarden van combobox als criteria gebruikt worden om de selectie te maken.

Als in alle drie comboboxen een waarde gekozen wordt dan werkt query goed. Maar nu wil ik dat als je in een van de comboboxen geen waarde kiest, maar leeg laat, dat dan voor dat veld gewoon alle waarden in query genomen worden. Nu is het resultaat van query altijd leeg.

Hoe kan ik query aanpassen dat een leeg veld van combobox toch werkt
 
Dag Orcaa,

als ik het goed zie maak je dus gebruik van een 'where' in je query waarin die mogelijk 3 parameters aan toegevoegd worden.
Nu heb ik niet zo geweldig veel ervaring met access, maar meer dagelijks met SQL Server.

Ik hoop dan ook dat het zo ongeveer zal kloppen:

SELECT *
FROM personen
WHERE IIf(parameter1="", voornaam=voornaam, voornaam=parameter1) and IIf(parameter2="", achternaam=achternaam, achternaam=parameter2) and IIf(parameter3="", adres=adres, adres=parameter3);

Ik hoop dat het zo een beetje werkt, in SQL Server gaat het namelijk heel makkelijk met een Case :cool:

Vriendelijke groet,

Bart
 
Aangezien het een Access forum is, mag een Access oplossing uiteraard niet ontbreken:

Code:
SELECT Renners.Voornaam, Renners.Achternaam, Uitslagen.Plaats
FROM Renners INNER JOIN Uitslagen ON Renners.RennerID = Uitslagen.RennerID
WHERE (((IIf([Forms]![fSelectie]![cboRenner] Is Null,True,[Uitslagen].[RennerID]=[Forms]![fSelectie]![cboRenner]))<>False))
ORDER BY Uitslagen.Plaats;
De truc zit 'm natuurlijk in de WHERE regel, waarin je met een IIF checkt of de keuzelijst gevuld is of niet. Als dat niet het geval is,dan wordt de waarde TRUE in het WAAR deel gezet. Als er een waarde is gekozen, dan wordt een vergelijking gemaakt tussen een veld ( in het voorbeeld [Uitslagen].[RennerID]) en de waarde van het formulierveld ([Forms]![fSelectie]![cboRenner]). Die vergelijking levert ook weer een Waar of Niet waar op. Als je in de tabel records hebt met Kuipers, Jansen en Breukink, en je kiest Jansen in de keuzelijst, dan zijn de uitkomsten dus respectievelijk Onwaar, Waar en Onwaar. Zou je deze formule in een veld laten zien, dan zie je dus de uitkomsten van die vergelijking. Oftwel een kolom met 0 en -1. (Onwaar en Waar). Je wilt alleen de records zien die Waar zijn, dus je filtert op Waar, of, om het netter te doen: <>Onwaar.
De query heeft een extra voordeel: als je de query uitvoert zonder iets te selecteren (met of zonder formulier) dan zie je altijd alle records. Dan wordt namelijk de WAAR van de IIF uitgevoerd. Deze constructie kun je onbeperkt toepassen voor meerdere velden, want je kunt zo'n formule voor elk veld met een eigen keuzelijst toepassen. En alleen de keuzelijsten die je gebruikt (i.c. een waarde selecteert) maken deel uit van het filter.
Ik hoop dat je de uitleg een beetje snapt; zonder jouw eigen query moeten we wel zelf voorbeeldjes maken :)
 
Beide bedankt voor jullie sql oplossing, maar ben hier niet zo goed in thuis. Heb nu met de query tools de query gemaakt zie plaatje
querie_form_3fields.JPG
Hoe en in welk veld moet ik nu deze formule intypen?
Is dat bij criteria?
Heb ook plaatje van formulier met de 3 comboboxen erbijgedaan
form_3combo.JPG

Hopenlijk kan iemand mij dit uitleggen
\alvast bedankt
 
Ik heb een query gemaakt op basis van je eerste plaatje (de tweede is overbodig) met een filtering op één veld.
Code:
SELECT [Freezer Name], [Rack Name], [Library Name], [384w Plate Name]
FROM T_Storage_Details
WHERE (IIf([Forms]![Form1 test]![Combo2] Is Null,True,[Freezer Name]=[Forms]![Form1 test]![Combo2])<>False)
ORDER BY [Freezer Name];
Je kunt mijn filter methode prima zelf maken in het queryvenster. De criteriums die je nu hebt bij de 3 velden moet dus weg; daarvoor in de plaats komen extra velden die je niet zichtbaar hoeft te maken, omdat er toch alleen maar een 0 of -1 in komt te staan. De overige 2 kan je nu hopelijk zelf :)
 
Octafish bedankt voor je snelle reaktie, maar heb toch nog een vraagje.

Mij is het niet duidelijk waar ik deze code neer moet zetten. Als ik in het queryvenster ben, dan moet ik onder de velden (freezer_name, Rack_name en library_name) in het criteriaveld de verwijzing naar de comboboxen op het formulier verwijderen.
Maar wat ik niet snap is het stukje "daarvoor in de plaats komen extra velden die je niet zichtbaar hoeft te maken, omdat er toch alleen maar een 0 of -1 in komt te staan"
moet dit in query venster gebeuren? in welk veld moet dit dan en moet ik dan in veld deze sql code zetten ?

Of hoe kan ik in dit query venster een "where" gedeelte invoeren.
Kan jij mij hiervan een klein screenshot laten zien hoe en waar ik dit in queryvenster in moet vullen

alvast bedankt
 
De totale querycode die je nu hebt in de SQL weergave kun je vervangen door mijn code. Dan doet de query precies wat-ie moet doen. Ga je daarna terug naar de Ontwerp weergave, dan zie je hoe het er in het raster uitziet, wat anders is dan wat je nu hebt. Je hebt er dan een extra veld bij dat niet getoond wordt. En dat veld kun je als basis gebruiken voor je eigen pogingen ;)
 
Dank je wel. Heb het geprobeerd en werkt perfect

nogmaals dank
 
Ken die op slot :)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan