[AccessD] FindFirst Not Working

Rocky Smolin rockysmolin at bchacc.com
Sun Jul 12 14:57:28 CDT 2009


Jurgen:

"I see you have a dot between recordset and clone in the 2nd line of the
code you posted. (Recordset.Clone rather than RecordsetClone). "


That was it!!!! That's why I needed more eyeballs on this.  I never would
have seen that extra period.

Thank you.

Rocky
 

-----Original Message-----
From: accessd-bounces at databaseadvisors.com
[mailto:accessd-bounces at databaseadvisors.com] On Behalf Of Jurgen Welz
Sent: Sunday, July 12, 2009 9:57 AM
To: accessd at databaseadvisors.com
Subject: Re: [AccessD] FindFirst Not Working


DAO?  Make certain of your references.


I believe every time you call RecordsetClone, you get a new clone so you'll
need to use dimension a recordset variable and set it to the recordsetclone
and use the variable.  I'm not certain of this, but in any event, it's
faster to reuse the variable.  I see you have a dot betwen recordset and
clone in the 2nd line of the code you posted. (Recordset.Clone rather than
RecordsetClone).  I'd check the data type of fldPOHIS is numeric.  If it's
string, you need: .FindFirst "fldPOHID = '" & Me.cboFindPO & "'".  I'd also
check that the lookup combo is bound to the first column by placing a break
in the code and doing a debug.print me.cboFindPO.Column(0).  That should
tell you the datatype while you're at it.  You'll need a NZ(me me.cboFindPO,
-1).  Users might delete the selection in the combo before they leave it and
I like to use a guaranteed no record is found on a blank combo and -1
doesn't come up as an autonumber for about 4 billion records.

 

One other thing I like to do is, if the form is designed to display one
record at a time and isn't continuous or a datasheet view, I like to set the
form recordset to a single record.  That way the form loads very quickly and
works similar to data on demand subforms.

 

If you look online at: http://msdn.microsoft.com/en-us/library/bb258175.aspx
you'll find the following example:

 
Sub SupplierID_AfterUpdate()
    Dim rst As Recordset
    Dim strSearchName As String

    Set rst = Me.RecordsetClone
    strSearchName = Str(Me!SupplierID)
    rst.FindFirst "SupplierID = " & strSearchName
        If rst.NoMatch Then
            MsgBox "Record not found"
        Else
            Me.Bookmark = rst.Bookmark
        End If
    rst.Close
End Sub
The msdn example uses a numeric ID but does a string conversion as the
findfirst method accepts a search parameter.  Most people that I know just
pass the numeric and allow the implicit type conversion resulting from the
concatenation.  I'm also not sure of the Str(Me!SupplierID).  I'd have used
strSearchName = cStr(me!SupplierID & "") which also handles the nulls.


Ciao 

Jürgen Welz 

Edmonton, Alberta 

jwelz at hotmail.com


 
> From: rockysmolin at bchacc.com
> To: accessd at databaseadvisors.com
> Date: Sun, 12 Jul 2009 06:47:30 -0700
> Subject: [AccessD] FindFirst Not Working
> 
> Dear List:
> 
> Legacy app. I added a form to make purchase orders. In the AfterUpdate 
> event of the combo box which finds an existing purchase order I added 
> the
> following:
> 
> 
> Private Sub cboFindPO_AfterUpdate()
> Me.Recordset.Clone.FindFirst "fldPOHID = " & Me.cboFindPO.Column(0) 
> MsgBox Me.RecordsetClone.NoMatch Me.Bookmark = 
> Me.RecordsetClone.Bookmark Me.Refresh End Sub
> 
> But the form does not move to the selected Purchase Order.
> 
> I put in the MsgBox just to make sure NoMatch was False. I added the 
> Refresh to see if that was the problem.
> 
> Does anyone see a reason why this shouldn't work? 
> 
> MTIA,
> 
> Rocky

_________________________________________________________________
Internet explorer 8 lets you browse the web faster.
http://go.microsoft.com/?linkid=9655582
--
AccessD mailing list
AccessD at databaseadvisors.com
http://databaseadvisors.com/mailman/listinfo/accessd
Website: http://www.databaseadvisors.com





More information about the AccessD mailing list