Dlookup problem with joint PK Subform

I have created a form and subform
The main form 'Students' is PK'd on 'Student code'
The Subform 'TblEnrolmentBookings' is based on a joint PK of 'Student code' and 'Course Code', so I have a list of booking for a particular student


I am try to prevent users from booking students on the same course twice using Dlookup...

Private Sub Course_Code_LostFocus()
    If Me.NewRecord And Not IsNull(DLookup("[Course Code]", "TblEnrolmentBookings", _
       "[Student Code]='" & Me![Student Code] & "'")) Then
   'PK already exists
        Debug.Print Me![Student Code]
        MsgBox "Student already booked on this course. Choose another"
        DoCmd.GoToControl "[Course Code]"
    End If
End Sub

I thought the lookup would return null if it didn't find the course code in the table but it is flagging it every time, even when the course code is new to the entire Bookings tbale, not just for the significant Student Code.
To add insult to injury, the GoToControl action doesn't even work. It just moves to the next field!

Help! and thanks in advance
 
JohnSaintAsked:
Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

stevbeCommented:
I would use the BeforeUpdate and then cancel it if there is already a match.

Private Sub Course_Code_BeforeUpdate(Cancel As Integer)
If Me.NewRecord = True Then
    If Not IsNull(DLookup("[Course Code]", "TblEnrolmentBookings", "[Student Code]='" & Me![Student Code] & "'")) Then
         Msgbox "Already Exists"
         Cancel = True
    End If
End If
End Sub

can you get the dlookup to work if you hardcode values in the immediate window (ctl+g)

?DLookup("[Course Code]", "TblEnrolmentBookings", "[Student Code]='A57'")

Steve
0
JohnSaintAuthor Commented:
That didn't seem to work. And what do you make of these results..

?DLookup("[Course Code]", "TblEnrolmentBookings", "[Student Code]='AA11'")
21

The first course code in the list is 21

I tried to take it a step further....

?DLookup("'33333'", "TblEnrolmentBookings", "[Student Code]='AA11'")
33333

There is no 33333 in the table.

Any ideas??? I am stumped!
0
stevbeCommented:
is there a student code AA11 in the bookings table?

TblEnrolmentBookings has fields Course Code and Student Code?
0
Ultimate Tool Kit for Technology Solution Provider

Broken down into practical pointers and step-by-step instructions, the IT Service Excellence Tool Kit delivers expert advice for technology solution providers. Get your free copy now.

shanesuebsahakarnCommented:
If it's a joint PK, you'll need to check both the student and course values in the dlookup (although you only need to return one field),i.e:

    If Me.NewRecord And Not IsNull(DLookup("[Course Code]", "TblEnrolmentBookings", _
       "[Student Code]='" & Me![Student Code] & "' AND [Course Code]='" & Me![Course Code] & "'")) Then
0
JohnSaintAuthor Commented:
Ah! thanks, that worked. I was confused because it was flagging course codes weren't in the table at all for any student!

My GoToConrol command still doesn't work though. Any ideas?
0
shanesuebsahakarnCommented:
Put your code in the OnExit event rather than the LostFocus event. Then instead of the GotoControl line, use:
Cancel=True

Cancelling an event only applies to certain events - not the LostFocus, so that's why you have to move it to Exit.
0

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
stevbeCommented:
shane ... out of curiosity ... why the Exit vent and not the before_update?

Steve
0
shanesuebsahakarnCommented:
Either one will do really - it's a matter of preference I suppose. I personally do tend to use BeforeUpdate but it's just that when I see code that uses LostFocus I automatically think "switch it to Exit instead"....don't ask me why :)
0
stevbeCommented:
I use Before_Update because it will stop the data from being written and the Exit will only stop you from moving to a different control, if you only use Exit and then try to navigate a record (nav buttons) it will not switch to the next record but it WILL commit your changes.

Steve
0
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Microsoft Access

From novice to tech pro — start learning today.

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.