Paul Strauss
Paul at PStrauss.net
Thu Sep 9 20:21:24 CDT 2004
At 9/9/2004 04:39 AM, you wrote:
>Darren,
>
>I do this in one of my apps:
>
>Function DuplicateCount(fnIn, snIn) As Long
>Dim k As Variant, criteria as String
> criteria = "FirstName = '" & fnIn & "' AND LastName = '" & snIn & "'"
> k = Nz(DCount("*", "tblWhatever", criteria))
> DuplicateCount = k
>End Function
Try this (air code):
Function DuplicateCount (strFirstName as string , strLastName as string) as
Long
Dim strSQL as String
Dim rs as DAO.Recordset
strSQL ="Select FirstName From Names_tbl Where FirstName = ' " strFirstName
& "' And LastName = '" strLastName & "'"
set rs = CurrentDB.OpenRecordset(strSQL)
rs.MoveLast ' force RecordCount to reflect actual number of rows
DuplicateCount = rs.RecordCount
' clean up after yourself
rs.Close
set rs = nothing
strSQL = vbNullString
End Function
The Domain Aggregate functions are very slow; Select is much faster.
Some comments:
"k" should not be a variant unless you really need it to be. It is a slow
datatype. Long would be much preferred. Besides, you don't need "k" at all.
You can assign an expression to the function name:
DuplicateCount = Nz(DCount("*", "tblWhatever", criteria))
would work just fine. If you are worried about Nz returning a zero if the
DCount returns null, then just do:
DuplicateCount = Nz(DCount("*", "tblWhatever", criteria), 0)
^
which forces a zero to be returned if you pass it a null no matter what the
datatype the DCount returns. I never depend on defaults (too many details
to remember) and so I always pass the 0 myself. It might also be a little
faster if a null is passed in because the function knows is doesn't have to
figure out what to pass back if you are explicit about it. (I used to be a
real-time programmer, and I can't break the habit of counting the
milliseconds. And nowadays, since memory is so plentiful, I will usually
burn memory if it makes my code faster.)
Still, none of this addresses the problem of what to do if you do find
duplicates. I think you have to show the user the current row, or rows, and
somehow let them decide to enter another row with the same first and last
name or select one of the existing ones for display or edit.
Regards,
Paul Strauss
----------
Web Site Design, Graphics, and Hosting (www.RationalHosting.net)
MS Access Database Custom Applications
Technical Support and Consulting
718-253-5535 / 917-975-1729
<mailto:Paul at PStrauss.net>Paul at PStrauss.net