Solved

VB 2005 Analog to VBA Instr() Function

Posted on 2010-11-19
10
421 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 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 250 total points
ID: 34179713
The other option is Not In
" WHERE  UCase(Left([Accounts]![Customer],1)) Not In ('A', 'B', ...)"
0
Business Impact of IT Communications

What are the business impacts of how well businesses communicate during an IT incident? Targeting, speed, and transparency all matter. Find out more in this infographic.

 
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

[Webinar] Code, Load, and Grow

Managing multiple websites, servers, applications, and security on a daily basis? Join us for a webinar on May 25th to learn how to simplify administration and management of virtual hosts for IT admins, create a secure environment, and deploy code more effectively and frequently.

Question has a verified solution.

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

Calculating holidays and working days is a function that is often needed yet it is not one found within the Framework. This article presents one approach to building a working-day calculator for use in .NET.
This article shows how to deploy dynamic backgrounds to computers depending on the aspect ratio of display
The Email Laundry PDF encryption service allows companies to send confidential encrypted  emails to anybody. The PDF document can also contain attachments that are embedded in the encrypted PDF. The password is randomly generated by The Email Laundr…

751 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