Limitations of the Data Control in Visual Basic Version 3.0 (103808)



The information in this article applies to:

  • Microsoft Visual Basic Standard Edition for Windows 3.0

This article was previously published under Q103808

SUMMARY

Chapter 20 in the "Programmer's Guide" explains how to use a data control in Microsoft Visual Basic version 3.0 for Windows. You may want to use an object variable such as Snapshot instead of using the data control. Chapter 20 does not explain the limitations of using the data control, so this article lists those limitations for you.

MORE INFORMATION

Because a data control is a special type of Dynaset, its limitations are similar to those of Dynasets. Here are the limitations of data controls:

  1. You cannot use a QueryDef requiring a Parameter in the RecordSource property of the data control.
  2. Using a data control along with other bound controls uses System Resources (memory). When you build larger programs, you may want to look at other programming methods (Database objects don't require controls, therefore you don't use System Resources) to display your database data.
  3. Not every method and property specific to the Table object can be performed by the data control. Here are two such cases:

    • You cannot take advantage of the Index property of the Table object to display your database data in a specific indexed order with the data control. This technique, described in the example shown in the Help file topic "Index Property (Data Access)," works only with the Table object, not the data control. As an alternative, you can use an ORDER BY clause in an SQL statement, as in this example:
               Data1.RecordSource = "Select * From Publishers Order By PubID"
      								
      The ORDER BY clause technique is also more flexible than the Index property technique. Using the ORDER BY clause, you can sort on any field, and no specified index is required.
    • You cannot use a Seek method on your database data for a specific record with the data control. The Seek method can only be used by the Table object. You can, however, perform a FindFirst method with the data control.
  4. You cannot use the Sort property on a specific database record with the data control. The Sort property technique is specific to a Dynaset or Snapshot object. The following example proves this limitation:
          Data1.Recordset.Sort = "City DESC"   '** No error occurs
          Data1.Refresh                        '** No change in order occurs
    						
    If you try to sort the Publishers table by City, nothing happens. But if you use an ORDER BY clause in an SQL statement, as in the following example, you will see the database data displayed in descending order by the City names:
          Data1.RecordSource = "Select * From Publishers Order By City DESC"
          Data1.Refresh
    						
  5. A data control is bound to one, single form -- the form on which it resides. Therefore, when the form that contains the data control is not loaded, you cannot refer to the data control from another form.
  6. You cannot perform a FileCopy statement on a database while a form that contains a data control is loaded. A "Permission Denied" error occurs if you try to use the FileCopy statement to make a backup of your database while a form containing a data control is loaded in memory. To prevent this error, first close or unload the form that contains the data control. Then run the FileCopy statement to make a database backup.
  7. You cannot use a data control to display the results of a parameter query. It is possible to use the Database object of the data control to open and run a querydef which requires parameters. For example:
       Sub Command1_Click ()
          Dim db As Database
          Dim Qd As QueryDef
          Dim Sn As Snapshot
    
          Data1.DatabaseName = "c:\vb\biblio.mdb"
          Data1.RecordSource = "Authors"
          Data1.Refresh
    
          ' Open the "By date" query
          Set Qd = Data1.Database.OpenQueryDef("By date")
          ' Set the value of the dp parameter
          Qd!dp = 1991
          ' create a snapshot off of querydef
          Set Sn = Qd.CreateSnapshot()
          Sn.MoveFirst
          Do Until Sn.EOF
             For i = 1 To Sn.Fields.Count - 1
                Print Sn(i) & " ";  'Display results of query
             Next
             Print
             Sn.MoveNext
          Loop
          Sn.Close
          Qd.Close
          db.Close
       End Sub
    						

Modification Type:MinorLast Reviewed:1/8/2003
Keywords:KB103808