Buck Beasom
asked on
VB 2005 Analog to VBA Instr() Function
I have this cool little form in an Access app that allows the user to use sort of a "Thumb Index" to filter a large file of customers. There are 27 buttons - one for each letter, and one with a pound sign on it for customers with names like "123 Plumbing" or "1-800-Ask Gary."
Getting the sql to filter on the first letter is easy. But to get all the clients whose names start with a non-letter, I used this:
If strAlpha = "#" Then 'Number Picked
strCritString = " WHERE InStr('ABCDEFGHIJKLMNOPQRS TUVWXYZ', UCase(Left([Accounts]![Cus tomer],1)) ) = 0 "
Else 'Letter Picked
strCritString = " WHERE UCase(Left([Accounts]![Cus tomer],1)) ='" & strAlpha & "'"
End If
Evidently the InStr function in VB 2005 functions a little differently. I just want to be able to test for the case where the "strAlpha" variable is not one of the 26 letters.
THANKS!
Getting the sql to filter on the first letter is easy. But to get all the clients whose names start with a non-letter, I used this:
If strAlpha = "#" Then 'Number Picked
strCritString = " WHERE InStr('ABCDEFGHIJKLMNOPQRS
Else 'Letter Picked
strCritString = " WHERE UCase(Left([Accounts]![Cus
End If
Evidently the InStr function in VB 2005 functions a little differently. I just want to be able to test for the case where the "strAlpha" variable is not one of the 26 letters.
THANKS!
The other option is Not In
" WHERE UCase(Left([Accounts]![Cus tomer],1)) Not In ('A', 'B', ...) = 0 "
" WHERE UCase(Left([Accounts]![Cus
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Try this:
If Char.IsNumber(strAlpha.Substring(0, 1)) Then 'Number Picked
ASKER
OK. I am working remote from my house on my work computer, so this is a little difficult to test. But here goes.
LVMB's solution is valuable information, but doesn't get me where I want. If I interpret Zhaolai correctly, this would work, but only if the 1st character of the customer name is a number. I also have all kinds of other bizarre cases like +, /, # and so on. Some are actually names that begin with those characters and sometimes it's just a typo. (I even have spaces, in a few cases.)
So it looks like Codecatcher's solution is best for my specific need, but I need to confirm. If I continue the SECOND solution you propose so that there are 26 arguments in the "Not In" function - basically each of the 26 regular letters of the alphabet - I'm guessing that will return a list of all those customers that start with a character that is Not In ABCDEFGHIJKLMNOPQRSTUVWXYZ . Of course, I have to list each letter in ' ' and separated by a comma.
Right? (Or is it the first solution?)
THANKS!
LVMB's solution is valuable information, but doesn't get me where I want. If I interpret Zhaolai correctly, this would work, but only if the 1st character of the customer name is a number. I also have all kinds of other bizarre cases like +, /, # and so on. Some are actually names that begin with those characters and sometimes it's just a typo. (I even have spaces, in a few cases.)
So it looks like Codecatcher's solution is best for my specific need, but I need to confirm. If I continue the SECOND solution you propose so that there are 26 arguments in the "Not In" function - basically each of the 26 regular letters of the alphabet - I'm guessing that will return a list of all those customers that start with a character that is Not In ABCDEFGHIJKLMNOPQRSTUVWXYZ
Right? (Or is it the first solution?)
THANKS!
If you want anything not starting with a letter, then try this:
If Not Char.IsLetter(strAlpha.Substring(0, 1)) Then 'Not a Number Picked
I think the second option is right for you and yes you will have to add all the alphabets in '' in the "Not In" clause.
My solution is T-SQL based whereas the other solutions are .NET based and I dont know how this line will help you
"If Not Char.IsLetter(strAlpha.Sub string(0, 1))"
My solution is T-SQL based whereas the other solutions are .NET based and I dont know how this line will help you
"If Not Char.IsLetter(strAlpha.Sub
ASKER
Zhaolai:
That seems a more elegant solution. But I am using the test in an SQL criteria string. So I need something like "WHERE Char.Isletter(UCase(Left([ Accounts]! [Customer] ,1))) = False". I will try your solution and see if the SQL gets interpreted properly.
Thanks.
That seems a more elegant solution. But I am using the test in an SQL criteria string. So I need something like "WHERE Char.Isletter(UCase(Left([
Thanks.
ASKER
After trying all of the various permutations, this was the one that functioned the way I wanted it to in the SQL string.
Thanks!
Thanks!
Glad to help.
Dim s as String
s = "abcdefghijklmnopqrstuvwxy
console.writeline s.Substring(2,1)
2 is the starting position
1 is the length you want to take
s.substring(2,1) = b
s.substring(2,3) = bcd
etc...