Solved

AfterUpdate/Change/Dirty question

Posted on 2010-11-18
6
433 Views
Last Modified: 2013-11-27
So I have a quick question, I think. Can someone explain to me the difference between these two, or better yet, tell me how to do what I am trying to do. I have a textbox on a form that populates today's date (IssueDate). I have another box that the user puts in the expiration date. On the AfterUpdate event I have some code that checks to see if the ExpirationDate is > 30 days, and if it is, alerts the user that it must be within 30 days. This is all great, however, the alert doesn't happen when the user picks the date, it happens once they click on another control on the form. I want it to happen right away. I have put this code on AfterUpdate, BeforeUpdate, Dirty, and Change, and none of those work. How do I get this to function correctly. Thanks for any help.

Here is my code:

 
Private Sub txtExpDate_AfterUpdate()
Dim daysDiff As Integer
daysDiff = DateDiff("d", Me.IssueDate, Me.ExpirationDate)
If daysDiff > 30 Then
MsgBox "Quality alerts cannot expire more than 30 days from date of issue."
Me.ExpirationDate.Value = ""
'Me.ExpirationDate.SetFocus
End If


End Sub

Open in new window


p.s.  that line Me.ExpirationDate.SetFocus bombs out too, what's up with that?

Thanks again for taking the time to help me out.
0
Comment
Question by:G Scott
[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
  • 2
  • 2
  • 2
6 Comments
 
LVL 4

Expert Comment

by:incerc
ID: 34164282
Hi,

For the differences btw the events, please see :
http://msdn.microsoft.com/en-us/library/ee291976%28v=office.12%29.aspx

Long story short :

- BeforeUpdate and AfterUpdate events for the text box or combo box control occur after you have entered the new or changed data in the control and moved to another control (or clicked Save Record on the Records menu)
- Change and Dirty events occur when the content of the control is changed by typing the data into the control or set the control's Text property (not its value!).

Please try to set the Text property of your textbox and handle the OnChange event.
0
 
LVL 28

Expert Comment

by:omgang
ID: 34164320
What is the name of the text box for IssueDate?  ExpirationDate?

Me.ExpriationDate.SetFocus -- is there a control on the form NAMED ExpirationDate?  From your code it seems that the control NAME is txtExpDate.

When you attempted this using the BeforeUpdate event did you add to your code
If daysDiff > 30 Then
MsgBox "Quality alerts cannot expire more than 30 days from date of issue."
Cancel = True
?

OM Gang
0
 
LVL 1

Author Comment

by:G Scott
ID: 34164748
omgang - yes, you are right, I had my names all messed up.
incerc - I have placed my code on the OnChange event and it works, somewhat.

When I use the DatePicker as soon as I choose the date I can tell it is running the code, however, I am getting and 'Invalid Use of Null' error. I will attach the code that I am using now, forgive me that it has changed a bit from the first post, I have added some msgbox statements to see where/when things are going wrong.  It errors on the line:

theExpirationDate = Me.expDate

 
Private Sub expDate_Change()
Dim theExpirationDate As String
theExpirationDate = Me.expDate
MsgBox Me.theIssueDate
MsgBox theExpirationDate
Dim daysDiff As Integer
daysDiff = DateDiff("d", CDate(Me.theIssueDate), Me.expDate)
If daysDiff > 30 Then
MsgBox "Quality alerts cannot expire more than 30 days from date of issue."
Cancel = True
Me.expDate.Value = ""
Me.expDate.SetFocus
End If
End Sub

Open in new window

I feel like an idiot. I have done this before on other DB's and it's worked fine. I don't know what my problem is today. I guess either too much or not enough coffee.

Thank you both for helping me out. I really appreciate it. QualityAlerts.accdb
0
Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
LVL 28

Assisted Solution

by:omgang
omgang earned 25 total points
ID: 34165107
The error is due to attempting to assign a Null value to a string variable.  Changing the variable to a Variant data type will stop the error but not fix the problem.  The problem is a value hasn't been assigned to the control expDate at the time this event fires.

More in a bit.

In general it's due to not enough coffee.
OM Gang
0
 
LVL 4

Accepted Solution

by:
incerc earned 100 total points
ID: 34171877
After taking a look on your Access file, I think maybe it's better to use the validation rule / validation text for the control.

Like this:

expDatField -> Properties -> Data -> validation rule : <=DateAdd("d",30,[theIssueDate])  
(the data in the control should not be greater than issueDate + 30 days).

expDatField -> Properties -> Data -> validation text : Quality alerts cannot expire more than 30 days from date of issue.

You don't need event handling this way.
Indeed, the validation rule is checked when the control loses focus, but it cannot let you putting a value that doesn't meet the criteria.

0
 
LVL 1

Author Closing Comment

by:G Scott
ID: 34173065
incerc - I never knew that solution even existed. Thanks for showing me that. It's pretty useful.

omgang - thank you too. I always forget that cancel=true command. That helped me solve another isuse I was having so BONUS!
0

Featured Post

Complete VMware vSphere® ESX(i) & Hyper-V Backup

Capture your entire system, including the host, with patented disk imaging integrated with VMware VADP / Microsoft VSS and RCT. RTOs is as low as 15 seconds with Acronis Active Restore™. You can enjoy unlimited P2V/V2V migrations from any source (even from a different hypervisor)

Question has a verified solution.

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

In earlier versions of Windows (XP and before), you could drag a database to the taskbar, where it would appear as a taskbar icon to open that database.  This article shows how to recreate this functionality in Windows 7 through 10.
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.
Familiarize people with the process of utilizing SQL Server stored procedures from within Microsoft Access. Microsoft Access is a very powerful client/server development tool. One of the SQL Server objects that you can interact with from within Micr…
Familiarize people with the process of utilizing SQL Server functions from within Microsoft Access. Microsoft Access is a very powerful client/server development tool. One of the SQL Server objects that you can interact with from within Microsoft Ac…

756 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