Keuzelijst met invoervak op basis van andere keuzelijst

Status
Niet open voor verdere reacties.
Je laatste opmerking is correct; echter had je in je SQL "* FROM" gebruikt, en dan heb je dus in beginsel alle velden uit die tabel in je keuzelijst staan. En die heb je niet nodig, lijkt mij. Het veld Land zou al genoeg moeten zijn. Eventueel kun je die nog filteren op Null of Not "" om ervoor te zorgen dat er alleen landnamen in staan, en SELECT DISTICT om er voor te zorgen dat de namen maar één keer voorkomen.

Wat wil je filteren met Productomschrijving? Want dat werkt in beginsel op dezelfde manier als Land en Plaats. Dus als je die werkend hebt, zou dat ook moeten kunnen voor de derde lijst.
 
Ik kwam er achter dat het al werkte alleen ik ben in verwarring geraakt doordat bij productomschrijving meerdere mogelijkheden werden/worden weer gegeven.

Wat ik hiermee bedoel is dat wanneer ik filter op land en daarna op plaats er dan bijvoorbeeld 2 records zijn gevonden... wanneer ik dan vervolgens ga filteren op productomschrijving dan geeft hij een rolldown met meer dan 2 mogelijkheden met voornamelijk lege vakken wat dus eigenlijk niet zo mogen gezien er maar 2 records zijn die aan de voorgaande criteria voldoen. Bij andere selecties die ik maak op bijvoorbeeld land en daarna op plaats en er worden dan bijvoorbeeld 5 records weer gegeven dan gaat het bij productomschrijving wel goed.

Ik heb geen idee waar dit aan kan liggen maar vindt het wel interessant om te weten waar mogelijk hier het probleem ligt.

De code bij afterupdate voor cboLand is als volgt

Private Sub cboLand_AfterUpdate()
Dim tmp
strSQL = "SELECT DISTINCT Plaats FROM [T_Basis Adressen Stap 1] WHERE Land = '" & Me.cboLand & "' ORDER BY Plaats"
Me.cboPlaats.RowSource = strSQL
Me.cboPlaats.Requery
Call Filteren
End Sub

De code bij enter cboLand is dit

Private Sub cboLand_Enter()
Me.cboCategorie = ""
Me.cboPlaats = ""
End Sub

De code bij afterupdate cboPlaats

Private Sub cboPlaats_AfterUpdate()
Dim tmp
strSQL = "SELECT DISTINCT Produktomschrijving FROM [T_Basis Adressen Stap 1] WHERE Plaats = '" & Me.cboPlaats & "' ORDER BY Produktomschrijving"
Me.cboCategorie.RowSource = strSQL
Me.cboCategorie.Requery
Call Filteren
End Sub

De code na enter bij cboPlaats is

Private Sub cboPlaats_Enter()
Me.cboCategorie = ""
End Sub

De code bij afterupdate cboCategorie is

Private Sub cboCategorie_AfterUpdate()
Call Filteren
End Sub

De code functie filteren is deze
Function Filteren()
Dim sFilter As String
sFilter = ""

If Not Me.cboLand & "" = "" Then sFilter = "Land = '" & Me.cboLand & "'"
If Not Me.cboPlaats = "" Then
If Not sFilter & "" = "" Then sFilter = sFilter & " AND "
sFilter = sFilter & "Plaats = '" & Me.cboPlaats & "'"
End If
If Not Me.cboCategorie = "" Then
If Not sFilter & "" = "" Then sFilter = sFilter & " AND "
sFilter = sFilter & "Produktomschrijving = '" & Me.cboCategorie & "'"
End If

If sFilter = "" Then
Me.Filter = ""
Me.FilterOn = False
Else
Me.Filter = sFilter
Me.FilterOn = True
End If
Me.Requery

End Function

Zover de codes in de database.... misschien dat u er iets in ziet wat niet klopt?
 
Het is mij nog steeds niet gelukt, om bij de laatste keuzelijst met invoervak de gegevens te filteren die bij plaats zijn ingevuld. Hij geeft alle waarden die mogelijk zijn weer in de keuzelijst met invoervak.... HELP want ik kom er niet meer uit!
 
Maar ik zie niks fouts aan de code; zonder db kan ik er dus verder weinig van maken. Je kunt de lege records er nog uit filteren.

Code:
WHERE ((Produktomschrijving = Is Not Null And Produktomschrijving <>"") And (Plaats = '" & Me.cboPlaats & "') ORDER BY Produktomschrijving"
 
Ik heb de oorspronkelijke database aangepast en heb de dingen die we niet nodig hebben voor nu verwijderd echter is de db nu nog steeds 500 kb. Kan deze dus niet plaatsen, wel kan ik deze naar uw mail toe sturen.

Het formulier waarop het filter van toepassing is opent meteen... Om aan te tonen dat het bij het ene record wel goed werkt en bij het andere niet kun je onderstaande test doen.

1) Filter werkt niet goed bij als je bij bron (NNB 2009) invult en bij Plaats (Leeuwarden) dan filtert hij 2 records wanneer je vervolgens de selectie wilt verfijnen bij branche dan geeft hij meer dan 2 mogelijkheden.

2) Filter werkt wel goed als je bij bron (onbekend) invult en bij plaats (Almelo) dan filtert hij 6 records waarbij je vervolgens bij branche kunt kiezen uit 5 mogelijkheden (dit klopt omdat er 2 records zijn die zich in dezefde branche bevinden).

Wat nog het meest opvallende is dat wanneer je in de eerste situatie na het filteren (plaats) als je dan met je rechtermuisknop kiest voor formulierweergave de filtering wel goed werkt en het resultaat van de 2 records inclusief branche keurig staat aangegeven.


Ben benieuwd naar de bevindingen....
 
Laatst bewerkt:
Je kunt de db mailen, dan zet ik 'm wel in het draadje ter lering ende vermaek ;)
 
Laatst bewerkt:
Hier is-tie...
De derde keuzelijst filtert nu ook zoals het hoort. De reden dat hij een verkeerde selectie liet zien was op zich logisch: hij filterde namelijk maar op één waarde (cboPlaats). Omdat je verder niet op Land filtert, en plaatsen ook met andere landen zijn gekoppeld, kreeg je meer dan je verwachtte. De oplossing was dus het aanpassen van de SQL op de derde keuzelijst. Deze filtert nu op basis van cboLand en cboPlaats.
 

Bijlagen

Heb het inderdaad nagekeken en het werkt perfect... vermoedde al dat het daar ongeveer aan zou moeten liggen. Wanneer ik nu een filter heb gedaan met postcode gebied is het helaas niet mogelijk om deze vervolgens weer te filteren op land, branche en dergelijke is dit nog iets wat makkelijk te realiseren is?
 
Dat kan wel, als je die filtering ook weer toevoegt aan de bestaande filtering. De postcodevariabelen zijn publiek, en die kun je dus altijd mengen met de andere filters. Je kunt die dus rustig toevoegen aan de filter functie. Ook weer met een check of de variabelen leeg zijn of niet natuurlijk, want anders krijg je foutmeldingen.
 
In 2010 is het net zo moeilijk (of makkelijk) als in 2010. Als je er problemen mee hebt, en er met de tips in dit draadje niet uit komt, zou ik zeggen: maak een eigen vraag aan. Zowiezo netter dan een vraag stellen in een topic van iemand anders :)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan