View Single Post
  #7  
Old May 14th, 2009, 11:08 PM posted to microsoft.public.access.tablesdbdesign
Russ[_2_]
external usenet poster
 
Posts: 52
Default No duplicate records problem

John,

I was able to delete the record after entering your code, but the form
will not insert a digit into the ItemNo field (I've renamed and
removed the # symbol and replaced them with "No") when I insert a new
record.

On Thu, 14 May 2009 14:59:16 -0600, John W. Vinson
wrote:

On Thu, 14 May 2009 13:15:52 -0500, Russ wrote:

I've got a fairly simple db with only 4 tables. Only two are linked
by a field called E58# with a one to many relationship. In the
"many" table I want to allow a field's (Item#) value for each record
to contain a number 1, 2, or 3 and not duplicate the number under the
same E58# when entering data with a form.

However, in table design when I give it an index of 'Yes, no
duplicates' I cannot enter another Item# 1 or 2 or 3 in a different
record with a different E58#. I only want to restrict duplicity when
the E58# is the same. How can I do this?

I've tried making multiple keyed fields using both fields but if in
error a person enters the duplicate field value it is quite difficult
to extract yourself from the error. Even deleting the record in error
retrurns a message about no null values in key fields.


The unique index won't work for the exact reason you describe: that field
ISN'T unique.

What you can do is create a two field unique index on the E58# field and the
Item# field (do note that # is a date delimiter and may best be avoided in
fieldnames). In addition you can have Access automatically assign the Item#
and have your form check for duplicates, avoiding the table error. In the
form's BeforeInsert event you can put code

Private Sub Form_BeforeInsert(Cancel as Integer)
Me![Item#] = NZ(DMax("[Item#]", "[table]", "[E58#] = " & Me![E58#])) + 1
End Sub

and then check for duplicates before saving, just in case the user types a
value into the field:

Private Sub Form_BeforeUpdate(Cancel as Integer)
If Not IsNull(DLookUp("[Item#]", "table", _
"[E58#] = " & Me.[E58#] & " AND [Item#] = " & Me![Item#])) Then
MsgBox "Duplicate item number!", vbOKOnly
Cancel = True
End If
End Sub