Solved

Cascading combo boxes not enforcing mandatory field

Posted on 2013-01-25
1
362 Views
Last Modified: 2013-01-25
I have a pair of cascading combo boxes on an Access 2010 form, one (Source) unbound and one (InformationTitle) bound to a mandatory field in the form's underlying recordsource. Source is used to narrow down the choice available in InformationTitle.

The record source for the form is:
SELECT tblEvidence.EvidenceName, tblEvidence.EvidenceID, tblEvidence.InformationID FROM tblEvidence ORDER BY tblEvidence.EvidenceName;

Open in new window


The row source for Source (unbound combo) is:

SELECT tblSource.SourceID, tblSource.Source FROM tblSource ORDER BY tblSource.Source;

Open in new window


The row source  for InformationTitle (bound to mandatory table field tblEvidence.InformationID) is:

SELECT tblInformation.InformationID, tblInformation.SourceID, tblInformation.Title
FROM tblInformation WHERE ([Source]) Is Null OR tblInformation.SourceID=[Source])
ORDER BY tblInformation.Title;

Open in new window


The relevant elements of the underlying tables are:

tblEvidence: EvidenceID (long); EvidenceName (text); InformationID (long)
tblInformation: InformationID (long); Title (text)
tblSource: SourceID (long); Source (text)

All these fields are mandatory.

There is a many-to-one relationship between tblInformation and tblEvidence, and a many-to-one relationship between tblSource and tblInformation.

The validation rule on InformationID in tblEvidence is (Is Not Null).
The validation rule for InformationTitle on the form is Not IsNull (InformationTitle) -- although I don't think it should need one if the validation rule on the underlying table is working.

In Source_AfterUpdate, the following code executes:

Me.InformationTitle.Requery
Me.InformationTitle.Value = Null
Me.InformationTitle.SetFocus

Open in new window


In form_Current, the following code executes:
     If IsNull(Me.InformationTitle) Then
         Me.Source = 1 'The default value
     Else
         Me.Source = Me.InformationTitle.Column(1)
     End If

Open in new window


There is no code in InformationTitle_AfterUpdate.

The cascade works as expected, with two exceptions.

1. If an existing record is edited, by (a) selecting a 'Source' which has no associated 'Information' records, and (b) saving the record without completing the InformationTitle field, the old value of InformationTitle is restored when the expected behaviour is that an error be reported and the user required to fix their data.  (If a new record is created and saved with InformationTitle blank, the error is trapped as expected).
2. If an existing record is edited, by (a) changing the selection of 'Source', and (b) selecting an associated piece of 'Information' and (c) reverting to the original 'Source', 'InformationTitle' also reverts to its previous value when the expected behaviour is that it would be set to Null ready for the user to make a new selection.

What blindingly obvious mistake have I made? I've been struggling with this for two days, and haven't found anything that sets me on the right path.
0
Comment
Question by:colevalleygirl
1 Comment
 

Accepted Solution

by:
colevalleygirl earned 0 total points
ID: 38820097
Sorted.
I needed to remove the validation rule from InformationTitle on the form, and modify the code for Source_AfterUpdate to

Me.InformationTitle.SetFocus
Me.InformationTitle.Requery
Me.InformationTitle.Value = Null
Me.InformationTitle.Text = ""

Open in new window

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 article is a continuation or rather an extension from Cascading Combos (http://www.experts-exchange.com/A_5949.html) and builds on examples developed in detail there. It should be understandable alone, but I recommend reading the previous artic…
Introduction The Visual Basic for Applications (VBA) language is at the heart of every application that you write. It is your key to taking Access beyond the world of wizards into a world where anything is possible. This article introduces you to…
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…
Learn how to number pages in an Access report over each group. Activate two pass printing by referencing the pages property: Add code to the Page Footers OnFormat event to capture the pages as there occur for each group. Use the pages property to …

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

21 Experts available now in Live!

Get 1:1 Help Now