[AccessD] A2K: Filtering a pick list

Darren DICK d.dick at uws.edu.au
Wed Mar 3 18:12:57 CST 2004


No Archive
Thanks you all to those who responded
It's working like a charm
This list is Awesome

DD
----- Original Message ----- 
From: "Ken Ismert" <KIsmert at TexasSystems.com>
To: "'Access Developers discussion and problem solving'" <accessd at databaseadvisors.com>
Sent: Thursday, March 04, 2004 4:34 AM
Subject: RE: [AccessD] A2K: Filtering a pick list


> 
>   I'm a man, who manufactures,
>   who manufactures chairs.
>   I'm a man who manufactures
>   chairs and other wares.
>   I'm a man, who manufactures!
> 
> There is an efficient way to do this without building a custom WHERE clause.
> You need to make a WHERE clause for your original listbox query that works
> for every combination of combobox values.
> 
> Take cboSuppliers, for example. You want it to restrict to a single Supplier
> when a value is selected, but show all Suppliers when no value (Null) is
> selected. A WHERE expression that does this is:
>   WHERE Nz(tblChairs.SupplierID = [Forms]![frmChairs]![cboSuppliers], True)
> = True
> 
> When cboSuppliers has a value, this will return chairs only for that
> SupplierID. When cboSuppliers is Null, the Nz function will return True for
> all SupplierIDs. (Value = Null returns Null in all instances.)
> 
> So, your full WHERE clause would be:
>   WHERE (Nz(tblChairs.SupplierID = [Forms]![frmChairs]![cboSuppliers], True)
> = True)
>     AND (Nz(tblChairs.BackTypeID = [Forms]![frmChairs]![cboBackTypes], True)
> = True)
>     AND (Nz(tblChairs.RangeID = [Forms]![frmChairs]![cboRanges], True) =
> True)
>     AND (Nz(tblChairs.StyleID = [Forms]![frmChairs]![cboStyles], True) =
> True)
> 
> In the AfterUpdate event of each combo, your code to implement couldn't be
> simpler:
>   lstChairs.Requery
> 
> You could also introduce a Clear button, which would reset your filter in
> its Click event:
>   cboSuppliers.Value = Null
>   cboBackTypes.Value = Null
>   cboRanges.Value = Null
>   cboStyles.Value = Null
>   lstChairs.Requery
> 
> You will find this faster than forcing the listbox or subform to parse the
> RowSource SQL every time a filter combobox changes. This works well even for
> large tables, as long as the fields you are filtering on are properly
> indexed.
> 
> Note that this technique works best for fields that do not allow nulls, like
> keys. With slight modifications, you can get it to work for nullable fields.
> 
> Plus, for subforms, you have the advantage of allowing the user to filter
> the subform themselves, since you are not using the form's Filter property.
> This has saved me from having to recode a form because someone wanted a
> custom way of looking at the data.
> 
> -Ken
> 
> (my apologies to Mister Rogers)
> 
> 
> -----Original Message-----
> From: Darren DICK [mailto:d.dick at uws.edu.au]
> Sent: Wednesday, March 03, 2004 5:17 AM
> To: AccessD List
> Subject: [AccessD] A2K: Filtering a pick list
> 
> 
> Hello all
> I have a very large list box that lists all the products (in this case
> chairs) in a db
> Each chair in tblChairs has many fields but in this case the ones I am
> interested
> in are ChairID, SupplierID, BackTypeID, RangeID, StyleID
> 
> So on the same form as this very large list box of chairs, I have combo
> boxes -
> yep you guessed it - 4 of 'em - cboSuppliers, cboBackTypes, cboRanges,
> cboStyleID
> 
> I wanna filter the large list box based on the values in all or any
> combination of the combo boxes.
> 
> EG
> Say supplier 5 = Acme Manufacturing and in the whole dB there are 100 chairs
> made by Acme
> Say of that 100 that Acme produce 38 of em have a Backtype of 2 (as in Low
> =1 medium=2 High=3 etc)
> 
> I would want the large list to instantly decrease to 100 items if I selected
> Acme from the Suppliers combo.
> Then I would want that list to further decreas to 38 when I choose Medium
> back
> PSUEDo = show me evert chair in the dB with supplier ID = 5 and BackType = 2
> etc etc and then somehow accept the various combinations of combo choices.
> 
> Is there a clever or easy way of doing this without writing a zillion sql's
> then selecting the correct one
> and making it the listbox row source? <yech>
> 
> Many thanks in advance
> 
> Darren
> 
> 
> 
> 
> -- 
> _______________________________________________
> AccessD mailing list
> AccessD at databaseadvisors.com
> http://databaseadvisors.com/mailman/listinfo/accessd
> Website: http://www.databaseadvisors.com



More information about the AccessD mailing list