Prev: Syntax error in CREATE TABLE statement. (Error 3290)
Next: adding a Carriage Return or Line Feed character to an update query
From: Pam on 24 May 2010 14:14 I would like to create a query where the user can input 2 or more parameters (part numbers), separated by comma and/or space and return information about that part. I already have a query that accepts one parameter. Is there a way to do this with more than one? I have read some posts that say to use a table to serve up the paraments and the user chooses one or more. However, a particular part or parts may not yet be in the table as they are new or unknown. Is there any way to do this without using an existing table but just accept input from the user on the fly? Thanks!
From: Bob Barrows on 24 May 2010 14:21
Pam wrote: > I would like to create a query where the user can input 2 or more > parameters (part numbers), separated by comma and/or space and return > information about that part. I already have a query that accepts one > parameter. Is there a way to do this with more than one? > > I have read some posts that say to use a table to serve up the > paraments and the user chooses one or more. However, a particular > part or parts may not yet be in the table as they are new or unknown. > > Is there any way to do this without using an existing table but just > accept input from the user on the fly? > Here is a compilation of posts about how to deal with this issue: There are two solutions for this problem listed in the following KB article (Q210530 - ACC2000: How to Create a Parameter In() Statement), found by searching for the keywords "parameter list query" (no quotes) at http://support.microsoft.com. http://support.microsoft.com/suppor...s/Q210/5/30.ASP The first solution uses Instr() to test the field values against the list in the parameter. The second involves dynamically creating a SQL statement in code. Thanks to Paul Overway, here is a third solution, using the Eval function: WHERE (((Eval([Table]![Field] & " In(" & [Forms]![Formname]![textboxname] & ")"))=True)) or, using a prompted parameter: WHERE (((Eval([Table]![Field] & " In(" & [Enter List] & ")"))=True)) Thanks to Jeffrey A. Williams, here's a 4th solution: If you don't mind adding a table to your database, and you're comfortable dealing with possible multi-user issues, this will perform better than either of the solutions that involve running a function (Instr or Eval) on every row of your table: Create a new table with two fields: tblCriteria: Criteria text Selected boolean (yes/no) Populate the table with your values and select a couple of items. Now you can use this table in your query as such: Select * from table1 inner join tblcriteria on table1.[your criteria field] = tblcriteria.criteria where tblcriteria.selected = true You can easily setup a form (or subform) that is bound to tblCriteria and allow the users the ability of selecting which values they want. Thanks to Michel Walsh, here's yet another way: SELECT Table3.ConName, Table3.State, Table3.Zip FROM Table3 WHERE "," &[list] & "," LIKE "*," & [ConName] & ",*" with [param] some string like: '1,4,5,7' note that there is no space after the comas. It works simply. If AccountID is 45, clearly ',1,4,5,7,' LIKE '*,45,*' returns false. If AccountID is 4, on the other hand, ',1,4,5,7,' LIKE '*,4,*' returns true. So, you have, in effect, an IN( ) where the list is a parameter. -- HTH, Bob Barrows |