mriozzo68
asked on
Using wildcards with a LIKE statement
This is a continuation of a previous question (http://bit.ly/2yRemJp).
I have a textbox (key_sel) on a form (switchboard) that I want to allow the user to enter in a series of values separated by a semicolon, which will then be used as criteria in a query.
SQL statement is below:
keysql = "SELECT dbo_sys1_key_codes.key_cod e FROM dbo_sys1_key_codes Where key_code LIKE ('" & Replace(Trim(Forms!Switchb oard!key_s el), ";", "' or '") & "')"
If I use one value (*2XH07) the query runs fine and pulls the correct data. When I specify multiple criteria (I used *2XH07;*9XH16 as the value) it pulls no data. When I design view the query the query the criteria is below. Obviously the first "Like " is creating the problem.
Like (Like '*2XH07' Or Like '*9XH16')
Don't know what I'm doing wrong.
I have a textbox (key_sel) on a form (switchboard) that I want to allow the user to enter in a series of values separated by a semicolon, which will then be used as criteria in a query.
SQL statement is below:
keysql = "SELECT dbo_sys1_key_codes.key_cod
If I use one value (*2XH07) the query runs fine and pulls the correct data. When I specify multiple criteria (I used *2XH07;*9XH16 as the value) it pulls no data. When I design view the query the query the criteria is below. Obviously the first "Like " is creating the problem.
Like (Like '*2XH07' Or Like '*9XH16')
Don't know what I'm doing wrong.
Will there always only be 2 values entered, or could it be any number?
You probably need to SPLIT() the input value at ";", and then loop over the array adding OR LIKE's to the WHERE clause to get to a final query.
»bp
You probably need to SPLIT() the input value at ";", and then loop over the array adding OR LIKE's to the WHERE clause to get to a final query.
»bp
How about this?
»bp
keysql = "SELECT dbo_sys1_key_codes.key_code FROM dbo_sys1_key_codes Where key_code
LIKE ('" & Replace(Trim(Forms!Switchboard!key_sel), ";", "') OR LIKE ('") & "')"
»bp
ASKER
@Norie - access throws an undefined function error if LIKE is not there
@Bill Prew - it can be any number of values. Not sure I understand, the "Or Like"s get added in when the query runs.
This is how the query that runs translates the criteria statement - Like (Like '*2XH07' Or Like '*9XH16')
@Bill Prew - it can be any number of values. Not sure I understand, the "Or Like"s get added in when the query runs.
This is how the query that runs translates the criteria statement - Like (Like '*2XH07' Or Like '*9XH16')
Sorry, typo.
»bp
keysql = "SELECT dbo_sys1_key_codes.key_code FROM dbo_sys1_key_codes Where key_code LIKE ('" & Replace(Trim(Forms!Switchboard!key_sel), ";", "') OR LIKE ('") & "')"
»bp
ASKER
@Bill Prew - both statements throw a syntax error, saying there is a missing operator. The criteria is not being parsed correctly. It's translating as
key_code LIKE ('*2XH07') OR LIKE ('*PXH16')
key_code LIKE ('*2XH07') OR LIKE ('*PXH16')
I think you need to use, as Bill suggested, Split to get an array of the values entered in the textbox.
You could then use that array to create the criteria for your WHERE clause.
You could then use that array to create the criteria for your WHERE clause.
What and where is "dbo_sys1_key_codes" ? That sounds like a SQL Server table name rather than an Access one. Could you be doing a passthrough query or something? A little more context might help...
»bp
»bp
ASKER
I guess I'm missing the point here. From what I can see, the criteria statement is generating correctly it's just that Access is formatting the LIKE statement. It's the initial Like( that is causing the problem. The "or like" operators get built in correctly.
SOLUTION
membership
Create a free account to see this answer
Signing up is free and takes 30 seconds. No credit card required.
ASKER
the dbo table is an ODBC linked SQL table. We use Access as the front end tool. I have a switchboard form that users use to run preset queries. I was trying to simplify/expand the way that the users can enter criteria. Right now, the form is setup, rather inelegantly, with a number of text boxes that the users can enter one value into each, with or without wildcards. It runs fine, but they are limited to six variables. I could, I supposed just add a bunch more text boxes to make more choices available.
I was just trying to streamline by giving them one text field to enter their variables in separated by semicolons, then using the above SQL statements to parse the stream and build the query. If you look at the question I linked, I originally got a solution which used an IN statement to create the query. That worked fine for one of the other reports because the data being used was specific. Now I decided to try to change over another set of queries that use data that needs to be wildcarded and I'm stuck again.
I really tried many permutations of the SQL statement prior to reposting, but nothing is working.
I was just trying to streamline by giving them one text field to enter their variables in separated by semicolons, then using the above SQL statements to parse the stream and build the query. If you look at the question I linked, I originally got a solution which used an IN statement to create the query. That worked fine for one of the other reports because the data being used was specific. Now I decided to try to change over another set of queries that use data that needs to be wildcarded and I'm stuck again.
I really tried many permutations of the SQL statement prior to reposting, but nothing is working.
ASKER CERTIFIED SOLUTION
membership
Create a free account to see this answer
Signing up is free and takes 30 seconds. No credit card required.
ASKER
For further context, the command button I'm using is setup like this to fire the query
Private Sub Command275_Click()
Dim Query As DAO.QueryDef
Dim keysql As String
keysql = "SELECT dbo_sys1_key_codes.key_cod e FROM dbo_sys1_key_codes Where key_code LIKE ('" & Replace(Trim(Forms!Switchb oard!key_s el), ";", "' or '") & "')"
Set Query = CurrentDb.QueryDefs("qry_m ix_key_sel ect")
Query.Sql = keysql
DoCmd.OpenQuery ("qry_mix_key_select")
End Sub
Private Sub Command275_Click()
Dim Query As DAO.QueryDef
Dim keysql As String
keysql = "SELECT dbo_sys1_key_codes.key_cod
Set Query = CurrentDb.QueryDefs("qry_m
Query.Sql = keysql
DoCmd.OpenQuery ("qry_mix_key_select")
End Sub
ASKER
OK @Bill Prew and @Norie, that did it. Gosh I wish I was as smart as you people. I'd get more done a lot faster. OK splitting points?
Great, glad we sorted that out. Yes, fine for split for me, it was a collaboration...
»bp
»bp
ASKER
Thanks again everyone.
Does that make any difference?