Dan Waters
dwaters at usinternet.com
Sat May 26 09:26:31 CDT 2007
Steve,
I agree that while the Screen.ActiveControl may be causing the wrong control
to be checked, the value of the control for memo fields could indeed be a
zero length string and must be checked for. In this example all controls
are being checked (I assumed all the controls on the form could contain
text), so checking for a ZLS on other controls won't hurt.
This is an example of code I use for this purpose:
Private Sub cmdDescriptionComplete()
If DescriptionReady = False then
Exit Sub
End If
...
End Sub
Private Function DescriptionReady() As Boolean
Dim stgMessage As String
DescriptionReady = False
If IsNull(txtPONumber) Then
stgMessage = "The PO Number field is required.@ @"
FormattedMsgBox GstgNotReady, stgMessage, vbExclamation + vbOKOnly,
"Missing Information"
txtPONumber.SetFocus
Exit Function
End If
If IsNull(memProblem) Or memProblem = "" Then
stgMessage = "The Problem field is required.@ @"
FormattedMsgBox GstgNotReady, stgMessage, vbExclamation + vbOKOnly,
"Missing Information"
memProblem.SetFocus
Exit Function
End If
DescriptionReady = True
End Function
I like this because it give the user an informative error message and it
immediately moves the focus back to where they need to work.
You can also set up conditional checks:
If Not IsNull(A) And IsNull(B) Then
DescriptionReady = False
End If
Dan
-----Original Message-----
From: accessd-bounces at databaseadvisors.com
[mailto:accessd-bounces at databaseadvisors.com] On Behalf Of Steve Schapel
Sent: Friday, May 25, 2007 11:15 PM
To: Access Developers discussion and problem solving
Subject: Re: [AccessD] Error 3314 (required field) - trap in form_error
Gale,
Are you sure it is not recognising the control as Null? Whereas Dan has
suggested it may be a "" ZLS in the field, I can't see how that would
happen, so I doubt that that's the problem. To me, it looks like you
are testing the wrong control. It looks like your Screen.ActiveControl
may not be referring to the control you think it is. Shouldn't you have
the ctl.SetFocus *before* identifying it as the ActiveControl?
By the way, as an aside, I think you are doing it the hard way. Try
this idea instead... Set the field's Required property to No, its
Validation Rule property to Is Not Null, and its Validation Text
property to your user-friendly message. Delete the code. Voila?
--
Steve
Gale Perez wrote:
> Hi!
>
> I have a form with several fields whose "Required" property is Yes, and
> I want to trap Error 3314 (required field) in the form_error. I would
like
> the code to set focus on the first field that is required and null and
> display a custom message. The problem is that it isn't seeing the control
> as Null (so it ignores If IsNull(ctl), and just displays the customary
> message). I would greatly appreciate any advice.
>
> I am also interested in finding out if you can determine a control's
> table-level properties (e.g., required, and datatype) while in the form,
> instead of using an asterisk and looking at the label caption to do it.
> Here is the code:
>
> Dim ctl as Control
> Dim strCaption as String
> ......
> If DataErr = 3314 Then
> For Each ctl In Me.Controls
> ' get the caption for the field label
> strCaption = Screen.ActiveControl.Controls.Item(0).Caption
> If Left(strCaption, 1) = "*" Then 'required field
> If IsNull(ctl) Then 'it is ignoring this, not seeing the
> field as null
> ctl.SetFocus
> MsgBox Chr$(34) & strCaption & Chr$(34) & " is a
> required field."
> Response = acDataErrContinue
> Exit sub
> End If
> End If
> Next
> End if
>
> Thank you so much for any assistance,
> Gale
--
AccessD mailing list
AccessD at databaseadvisors.com
http://databaseadvisors.com/mailman/listinfo/accessd
Website: http://www.databaseadvisors.com