Mark A Matte
markamatte at hotmail.com
Wed Mar 3 14:12:42 CST 2004
Hello All, I use something for a few dbs to allow the user to use search criteria on multiple fields...the can use just 1 or all 5...this technique could be used to filter a combo box... Lets say I have 4 dropdowns that I want to use as criteria for the main dropdown...I would create the following fields on my form: Drop1 Drop2 Drop3 Drop4 MainDrop Drop1Wild Drop2Wild Drop3Wild Drop4Wild All 'Wild' fields will be hidden and default value = '*' On the AFTERUPDATE of the Drop1-4...populate the corresponding 'wild'...Ex: ***** Dim Drop1Wild Drop1Wild= Me!Drop1.Text & Chr(42) Me!Drop1Wild= Drop1Wild Me!MainDrop.Requery ***** Then on my ROW SOURCE of MainDrop I would use something like: ******** SELECT DISTINCTROW tblChair.ID FROM tblChair WHERE (((tblChair.Drop1) Like [Forms]![frmPickChair]![Drop1Wild]) AND ((tblChair.Drop2) Like [Forms]![frmPickChair]![Drop2Wild]) AND ((tblChair.Drop3) Like [Forms]![frmPickChair]![Drop3Wild]) AND ((tblChair.Drop4) Like [Forms]![frmPickChair]![Drop4Wild]) ORDER BY tblChair.ID; ******* This will will allow them to use any combination of the other dropdowns you provided...and even if they remove a value they entered...the sql will see it as just a wildcard... I'm sure, as always, there is a simpler/better way...but it works for me. Hope it helps... Thanks, Mark A. Matte >From: "Ken Ismert" <KIsmert at TexasSystems.com> >Reply-To: Access Developers discussion and problem >solving<accessd at databaseadvisors.com> >To: "'Access Developers discussion and problem >solving'"<accessd at databaseadvisors.com> >Subject: RE: [AccessD] A2K: Filtering a pick list >Date: Wed, 3 Mar 2004 11:34:11 -0600 > > > 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 _________________________________________________________________ Get a FREE online computer virus scan from McAfee when you click here. http://clinic.mcafee.com/clinic/ibuy/campaign.asp?cid=3963