PRB: Illegal to Use Find Method with Table Object Variable

Last reviewed: June 21, 1995
Article ID: Q106270
The information in this article applies to:

- Professional Edition of Microsoft Visual Basic for Windows, version 3.0

SYMPTOMS

Using the FindFirst, FindNext, FindLast, or FindPrevious method on an object variable of type Table results in this error:

   Can't perform operation; it is illegal.

Pressing the F1 key on this error dialog gives the following description from the Visual Basic Help:

   Error 3219.
   You tried to use a method or property with or on a recordset,
   and it isn't valid for that object.

CAUSE

The FindFirst, FindNext, FindLast, and FindPrevious methods can be used only with a Dynaset or Snapshot. These Find methods cannot be used with a Table object variable.

WORKAROUND

To move between the records of a Table, use the Seek method or the Move methods (MoveFirst, MoveLast, MoveNext, and MovePrevious).

Also, you can create a Dynaset or Snapshot variable on the whole Table by using the CreateDynaset or CreateSnapshot method. Then you can use the FindFirst, FindNext, FindLast, and FindPrevious methods on that Dynaset or Snapshot. The Find methods move between records that meet specific conditions.

STATUS

This behavior is by design.

MORE INFORMATION

Steps to Reproduce Behavior

The following code demonstrates the error using the FindFirst method on a Table object variable:

   Dim db As database
   Dim recordset As table  ' Correction: Dim recordset As dynaset
   Set db = OpenDatabase("c:\vb3\biblio.mdb")
   Set recordset = db.OpenTable("authors") ' Instead: db.CreateDynaset
   ' The following line gives "can't perform operation; it is illegal":
   recordset.FindFirst "Author like 'a*'"
   Debug.Print recordset.Fields("Author")

The following code works around this behavior by first creating a Dynaset from the Table, and then using FindFirst on the Dynaset:

   Dim db As database
      ' Dim recordset As table   ' Gives problem.
   Dim recordset As dynaset      ' Workaround.
   Set db = OpenDatabase("c:\vb3\biblio.mdb")
      ' Set recordset = db.OpenTable("authors")   ' Gives problem.
   Set recordset = db.CreateDynaset("Authors")    ' Workaround.
   recordset.FindFirst "Author like 'a*'"
   Debug.Print recordset.Fields("Author")

REFERENCES

See "Positioning the Current Record in a Recordset" on Pages 68-77 of the Visual Basic Professional Edition, version 3.0, "Professional Features Book 2" manual. Page 72 states, "The Find methods cannot be used on Table objects."


Additional reference words: 3.00
KBCategory: kbprg kbprb
KBSubcategory: APrgDataOther


THE INFORMATION PROVIDED IN THE MICROSOFT KNOWLEDGE BASE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. MICROSOFT DISCLAIMS ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROSOFT CORPORATION OR ITS SUPPLIERS BE LIABLE FOR ANY DAMAGES WHATSOEVER INCLUDING DIRECT, INDIRECT, INCIDENTAL, CONSEQUENTIAL, LOSS OF BUSINESS PROFITS OR SPECIAL DAMAGES, EVEN IF MICROSOFT CORPORATION OR ITS SUPPLIERS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. SOME STATES DO NOT ALLOW THE EXCLUSION OR LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES SO THE FOREGOING LIMITATION MAY NOT APPLY.

Last reviewed: June 21, 1995
© 1998 Microsoft Corporation. All rights reserved. Terms of Use.