A.D.Tejpal
adtp at touchtelindia.net
Tue Oct 19 09:15:42 CDT 2004
Canceling Open Action Of Form - If No Record
===================================
As a generic solution, insertion of code block given at (A) below, in Open event of the target form, will ensure that if there is no record (in its record source), the form will refuse to open and display a custom message instead.
This solution is universally applicable, whatever the filtering criteria in the command used for opening the form. It is however desirable to precede such a command by the following statement, in order to prevent error message (2501 - The OpenForm action was cancelled).
On Error Resume Next
It is observed from the original post (by Susan), that the command for closing the menu form has been placed before that for opening the target form. It has to be the other way around. Suggested revised code for click event of appropriate command button (CmdOpen) on the menu form, is given at (B) below.
A.D.Tejpal
--------------
(A) Code in target form (frmProjects)
==================================
Private Sub Form_Open(Cancel As Integer)
With Me.RecordsetClone
If .BOF And .EOF Then
MsgBox "You are not the QA on any projects"
Cancel = 1
End If
End With
End Sub
==================================
(B) Code in Menu Form
==================================
Private Sub CmdOpen_Click()
Dim stDocName As String
Dim stLinkCriteria As String
If Len(Nz(UsersName, "")) = 0 Then
Exit Sub
End If
stDocName = "frmProjects"
stLinkCriteria = "[QAFName]=" & _
"'" & Me![UsersName] & "'"
On Error Resume Next
DoCmd.OpenForm stDocName, , , stLinkCriteria
On Error GoTo 0
DoCmd.Close acForm, Me.Name
End Sub
==================================
----- Original Message -----
From: Gustav Brock
To: Access Developers discussion and problem solving
Sent: Tuesday, October 19, 2004 14:35
Subject: Re: [AccessD] Open a form and find a record
Hi Donald and Susan
It's an old and persistent rumour that DLookup is always slow. Quite often it is not. So, Susan, give it a try - it's extremely simple and in a minute your problem will be solved and you can move on to the more funny tasks.
By the way, the code could be simplified even further:
strCriteria ="[QAFName]='" & Me![UsersName] & "'"
If IsNull(Dlookup("[ProjectID]", "tblProjects", strCriteria)) Then
MsgBox "You are not the QA on any projects."
Else
' Open form ...
End If
/gustav
> Well, I don't have to worry much about portability issues, but I'd be interested in the opinions of folks better versed than I in the area of optimization.
I was under the impression that a simple one-time call to a domain function in a case like this is no big deal in terms of speed.
> (I suppose it depends on the size of the table.) I do avoid using them in iterative processes, however.
<< SNIP >>
----- Original Message -----
From: Klos, Susan
To: 'AccessD at databaseadvisors.com'
Sent: Monday, October 18, 2004 23:31
Subject: [AccessD] Open a form and find a record
I am using the following code to open a from the menu form and filter the records so that the user sees only their records.
Dim stDocName As String
Dim stLinkCriteria As String
stDocName = "frmProjects"
stLinkCriteria = "[QAFName]=" & "'" & Me![UsersName] & "'"
DoCmd.Close 'Closes the menu form.
DoCmd.OpenForm stDocName, , , stLinkCriteria
The problem is that sometimes the user's name will not be found on the form in the [QAFName] text box. This would simply mean that the user is not a "Quality Assurance" person on anybody's project.
When this happens I don't want the form to open. I want a message box to pop up that says "You are not the QA on any projects". On clicking ok on the message box the menu
opens back up.
Any help would be greatly appreciated.
Susan Klos
Senior Database Analyst
Evaluation and Reporting
Florida Department of Education
850-245-0708
sc 205-0708