Go Premium for a chance to win a PS4. Enter to Win

x
?
Solved

VB 2005 Analog to VBA Instr() Function

Posted on 2010-11-19
10
Medium Priority
?
425 Views
Last Modified: 2012-05-10
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('ABCDEFGHIJKLMNOPQRSTUVWXYZ', UCase(Left([Accounts]![Customer],1))) = 0 "
           
        Else 'Letter Picked
            strCritString = " WHERE UCase(Left([Accounts]![Customer],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!
0
Comment
Question by:Buck_Beasom
  • 4
  • 3
  • 2
  • +1
10 Comments
 

Expert Comment

by:LVMB1417
ID: 34175980
Substring is what you are looking for

Dim s as String

s = "abcdefghijklmnopqrstuvwxyz"

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...



0
 
LVL 83

Expert Comment

by:CodeCruiser
ID: 34179711
The other option is Not In
" WHERE  UCase(Left([Accounts]![Customer],1)) Not In ('A', 'B', ...) = 0 "
0
 
LVL 83

Accepted Solution

by:
CodeCruiser earned 1000 total points
ID: 34179713
The other option is Not In
" WHERE  UCase(Left([Accounts]![Customer],1)) Not In ('A', 'B', ...)"
0
Prepare for your VMware VCP6-DCV exam.

Josh Coen and Jason Langer have prepared the latest edition of VCP study guide. Both authors have been working in the IT field for more than a decade, and both hold VMware certifications. This 163-page guide covers all 10 of the exam blueprint sections.

 
LVL 17

Expert Comment

by:Zhaolai
ID: 34180211
Try this:
If Char.IsNumber(strAlpha.Substring(0, 1)) Then 'Number Picked

Open in new window

0
 

Author Comment

by:Buck_Beasom
ID: 34180811
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!
0
 
LVL 17

Expert Comment

by:Zhaolai
ID: 34180946
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

Open in new window

0
 
LVL 83

Expert Comment

by:CodeCruiser
ID: 34182997
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.Substring(0, 1))"
0
 

Author Comment

by:Buck_Beasom
ID: 34183001
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.
0
 

Author Closing Comment

by:Buck_Beasom
ID: 34196295
After trying all of the various permutations, this was the one that functioned the way I wanted it to in the SQL string.

Thanks!
0
 
LVL 83

Expert Comment

by:CodeCruiser
ID: 34196537
Glad to help.
0

Featured Post

Concerto Cloud for Software Providers & ISVs

Can Concerto Cloud Services help you focus on evolving your application offerings, while delivering the best cloud experience to your customers? From DevOps to revenue models and customer support, the answer is yes!

Learn how Concerto can help you.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Today I had a very interesting conundrum that had to get solved quickly. Needless to say, it wasn't resolved quickly because when we needed it we were very rushed, but as soon as the conference call was over and I took a step back I saw the correct …
This article shows how to deploy dynamic backgrounds to computers depending on the aspect ratio of display
Please read the paragraph below before following the instructions in the video — there are important caveats in the paragraph that I did not mention in the video. If your PaperPort 12 or PaperPort 14 is failing to start, or crashing, or hanging, …
Screencast - Getting to Know the Pipeline

916 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question