Solved

Select not working

Posted on 2013-11-30
12
201 Views
Last Modified: 2013-12-06
I have this database where I need to check if the membership is expiring next month.  The field is a 4 character text field mmyy.  I have code to reverse the comparison data to yymm to make it easier to compare and to account for going from December to January:


           
            If Format(Now(), "mm") = 12 Then
               NextMonthYear = Format(Now(), "yy") + 1 & "01"
               
            Else: NextMonthYear = Format(Now(), "yy") & Format(Now(), "mm") + 1  'reversed for comparison
           
            End If
                       
            strSQL = NormalSelect & ", [Expiration] FROM Table1 " & _
                 "WHERE [Life] <> Yes " & _
                 " AND (Right([Expiration],2) & (Left([Expiration],2) <= " & NextMonthYear & _
                 " ORDER BY [Last]"
                   
            CurrentDb.QueryDefs("Membership Expiring Next Month").SQL = strSQL
            DoCmd.OpenQuery "Membership Expiring Next Month"
           
I know the [Life] <> Yes is working but this portion:

" AND (Right([Expiration],2) & (Left([Expiration],2) <= " & NextMonthYear & _

is giving me an error at runtime.

Any help is appreciated.

Thanks,
Ric
0
Comment
Question by:Joppa
[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
  • 5
  • 3
  • 2
  • +1
12 Comments
 
LVL 14

Expert Comment

by:Bill Ross
ID: 39687684
Hi,

I suggest you use built in date arithmetic.

No need for NextMonthYear

Just use Format(DateAdd("m",1,date()),"YYMM") which will always yield the following correct month.  No if... is required.

Compare that

...AND clng([Expiration]) <= clng(Format(DateAdd("m",1,date()),"YYMM"));

Regards,

Bill
0
 
LVL 120

Expert Comment

by:Rey Obrero (Capricorn1)
ID: 39687688
what is  NornalSelect ?

try this

          strSQL = NormalSelect & ", [Expiration] FROM Table1 " & _
                 "WHERE [Life] <> Yes " & _
                 " AND (Right([Expiration],2) & (Left([Expiration],2) <= " & NextMonthYear & _
                 " ORDER BY [Last]"

' add this line
        Debug.Print strSQL


see what was printed in the  immediate window and post here


.
0
 
LVL 50

Expert Comment

by:Gustav Brock
ID: 39687968
Use real date valuess. It's much simpler.

           strSQL = NormalSelect & ", [Expiration] FROM Table1 " & _
                 "WHERE [Life] <> Yes " & _
                 "AND DateDiff('m', Date(), DateValue([Expiration])) = 1 " & _
                 "ORDER BY [Last]"

/gustav
0
Enterprise Mobility and BYOD For Dummies

Like “For Dummies” books, you can read this in whatever order you choose and learn about mobility and BYOD; and how to put a competitive mobile infrastructure in place. Developed for SMBs and large enterprises alike, you will find helpful use cases, planning, and implementation.

 

Author Comment

by:Joppa
ID: 39688062
capricorn1:

from the immediate window -

SELECT First, Last, Street, City, State, Zip, [Phone #] , [Expiration] FROM Table1 WHERE [Life] <> Yes  AND (Right([Expiration],2) & (Left([Expiration],2) <= 1401 ORDER BY [Last]


NormalSelect is used so I won't have to keep typing this:

 NormalSelect = "SELECT First, Last, Street, City, State, Zip, [Phone #] "

Ric
0
 
LVL 120

Expert Comment

by:Rey Obrero (Capricorn1)
ID: 39688085
change this

NormalSelect = "SELECT First, Last, Street, City, State, Zip, [Phone #] "


with

NormalSelect = "SELECT [First], [Last], Street, City, State, Zip, [Phone #] "


.
if you get a type mismatch error, use this
     
     strSQL = NormalSelect & ", [Expiration] FROM Table1 " & _
                 "WHERE [Life] <> Yes " & _
                 " AND (Right([Expiration],2) & (Left([Expiration],2) <= '" & NextMonthYear & "' _
                 " ORDER BY [Last]"
0
 

Author Comment

by:Joppa
ID: 39688089
Gustav,

  DateValue won't work in my case because the table was designed to have only 4 digits to represent the expiration date.  For example 1113 would be for Nov 2013.  There are no separators for DateValue to use.

Ric
0
 

Author Comment

by:Joppa
ID: 39688102
Bill,
 
  In order to get it to compile and recognize the CLng[Expiration] I had to take it out of the quotes but now it gives me a runtime error.  I've tried a lot of different formats but can't get it to work.

            strSQL = NormalSelect & ", [Expiration] FROM Table1 " & _
                 "WHERE [Life] <> Yes " & _
                 " AND " & CLng([ Expiration]) <= CLng(Format(DateAdd("m", 1, Date), "YYMM")) & " ORDER BY [Last]"

It doesn't even get to the debug.print statement to see what strSQL looks like.

Ric
0
 

Author Comment

by:Joppa
ID: 39688111
Capricorn1,

This also gave me a runtime error but I do get the string output.  I also made the suggested changes to NormalSelect.


            strSQL = NormalSelect & ", [Expiration] FROM Table1 " & _
                    "WHERE [Life] <> Yes " & _
                    " AND (Right([Expiration],2) & (Left([Expiration],2) <= " & NextMonthYear & _
                    " ORDER BY [Last]"
The output:

SELECT [First], [Last], Street, City, State, Zip, [Phone #] , [Expiration] FROM Table1 WHERE [Life] <> Yes  AND (Right([Expiration],2) & (Left([Expiration],2) <= 1401 ORDER BY [Last]

Ric
0
 
LVL 120

Accepted Solution

by:
Rey Obrero (Capricorn1) earned 500 total points
ID: 39688117
is the field [Life] a  YesNo field?

try this one


             strSQL = NormalSelect & ", [Expiration] FROM Table1 " & _
                 "WHERE [Life] <> -1 " & _
                 " AND Right([Expiration],2) & Left([Expiration],2) <= '" & NextMonthYear & "'" & _
                 " ORDER BY [Last]"



btw you have  two extra "("  before "Right" and "Left"
0
 
LVL 14

Expert Comment

by:Bill Ross
ID: 39688164
Hi,

Try this:

 strSQL =  "SELECT First, Last, Street, City, State, Zip, [Phone #], CLng([Expiration]) AS Expr1 FROM Table1 WHERE [Life] <> Yes AND Expr1 <= " & CLng(Format(DateAdd("m", 1, Date), "YYMM")) & " ORDER BY [Last]"

Note space between " and ORDER BY....

If that works we can modify again for the NormalSelect.

Regards,

Bill
0
 
LVL 50

Expert Comment

by:Gustav Brock
ID: 39688325
>  For example 1113 would be for Nov 2013

OK. Then still use date values or you easily get into trouble:


strSQL = NormalSelect & ", [Expiration] FROM Table1 " & _
    "WHERE [Life] <> Yes " & _
    "AND DateDiff('m', Date(), DateSerial(2000 + Val(Right([Expiration], 2)), Val(Left([Expiration], 2), 1)) = 1 " & _
    "ORDER BY [Last]"

/gustav
0
 

Author Closing Comment

by:Joppa
ID: 39702640
I tried the others and this one worked the best for me.

thanks,
Ric
0

Featured Post

Three Reasons Why Backup is Strategic

Backup is strategic to your business because your data is strategic to your business. Without backup, your business will fail. This white paper explains why it is vital for you to design and immediately execute a backup strategy to protect 100 percent of your data.

Question has a verified solution.

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

Preparing an email is something we should all take special care with – especially when the email is for somebody you may not know very well. The pressures of everyday working life stacked with a hectic office environment can make this a real challen…
AutoNumbers should increment automatically, without duplicates.  But sometimes something goes wrong, and the next AutoNumber value is a duplicate.  This article shows how to recover from this problem.
Using Microsoft Access, learn some simple rules for how to construct tables in a relational database. Split up all multi-value fields into single values: Split up fields that belong to other things into separate tables: Make sure that all record…
The view will learn how to download and install SIMTOOLS and FORMLIST into Excel, how to use SIMTOOLS to generate a Monte Carlo simulation of 30 sales calls, and how to calculate the conditional probability based on the results of the Monte Carlo …

733 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