Solved

Issue with VBA Function when adding criteria in Access Query

Posted on 2015-02-21
7
208 Views
Last Modified: 2016-02-10
Hi All,

I have a very simple function that I wrote to compare two number fields.  One field has 5 digits and another field has 7 digits.  I only care about the first 5 digits in the second field so I have a small function that trims the number and then does a compare and produces a result of 1 if it matches the conditions of the if statement, otherwise it produces a 0.  When I enter the function into an access query it runs without issue.  As soon as I put criteria that I want the function to only equal 1, below the function, the query freezes upon running and I cannot get out of it.  Below is the function.  If someone could help me I'd really appreciate it...

Option Compare Database

Public Function fnOVERBILL(BILLDATE As Double, MBHTDT As Double) As Double

Dim TERM As Double

TERM = CLng(Left(MBHTDT, 5))

If (BILLDATE > TERM) And (MBHTDT > 0) Then
    fnOVERBILL = 1
Else
    fnOVERBILL = 0

End If

End Function

Open in new window

0
Comment
Question by:Anthony6890
7 Comments
 
LVL 49

Expert Comment

by:Gustav Brock
ID: 40623458
Try using this expression in the query:

    Test: Nz(BILLDATE, 0) > Val(Left(Nz([MBHTDT], 0), 5)) And Nz([MBHTDT], 0) > 0

and set the criteria for this column to: True

/gustav
0
 
LVL 1

Author Comment

by:Anthony6890
ID: 40623504
Thanks for getting back to me.  I just tried that and it still locks up on me.  Access enters a Not Responding phase.

-Anthony
0
 
LVL 1

Author Comment

by:Anthony6890
ID: 40623510
Gustav,

When I use your formula, and I don't put true in the criteria it runs without issue.  I know that there are currently no results for this query which is why I want to test it out.  It can produce a 0 for everyone; however, if I put "True" in the criteria I shouldn't have any results happen.

-Anthony
0
Backup Your Microsoft Windows Server®

Backup all your Microsoft Windows Server – on-premises, in remote locations, in private and hybrid clouds. Your entire Windows Server will be backed up in one easy step with patented, block-level disk imaging. We achieve RTOs (recovery time objectives) as low as 15 seconds.

 
LVL 49

Expert Comment

by:Gustav Brock
ID: 40623518
Will this - without criteria - return any results:

    Test1: Val(Left(Nz([MBHTDT], 0), 5))
    Test2 Nz([BILLDATE], 0)

If so, try with these and the criteria as written:

    Test1: Val(Left(Nz([MBHTDT], 0), 5))
    Criteria: <[BILLDATE]

    Test2 Nz([BILLDATE], 0)
    Criteria: >0

/gustav
0
 
LVL 9

Accepted Solution

by:
Ramanhp earned 500 total points
ID: 40623553
I recommend try dividing the number of length 7 with 100000, and take the int part only and then do the matching criteria as per your logic..
0
 
LVL 47

Expert Comment

by:Dale Fye (Access MVP)
ID: 40624218
1.  Are these actually date values, or is the data type of the field actually number?

2.  If number, what do the extra two characters in the MBHTDT column mean?

3.  Do you have any records where either the BILLDATE or the MBHTDT is NULL?
0
 
LVL 1

Author Closing Comment

by:Anthony6890
ID: 40624254
This solution worked except I had to divide by 100 I stead of 100000. Thus worked great. Thanks.
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

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

This code takes an Excel list of URL’s and adds a header titled “URL List”. It then searches through all URL’s in column “A”, looking for duplicates. When a duplicate is found, it is moved to the top of the list. The duplicate URL’s are then highlig…
Describes a method of obtaining an object variable to an already running instance of Microsoft Access so that it can be controlled via automation.
As developers, we are not limited to the functions provided by the VBA language. In addition, we can call the functions that are part of the Windows operating system. These functions are part of the Windows API (Application Programming Interface). U…
In Microsoft Access, learn how to “cascade” or have the displayed data of one combo control depend upon what’s entered in another. Base the dependent combo on a query for its row source: Add a reference to the first combo on the form as criteria i…

863 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

Need Help in Real-Time?

Connect with top rated Experts

19 Experts available now in Live!

Get 1:1 Help Now