ACC97: DAO Property Retrieval Slow with Linked Table ObjectsLast reviewed: August 29, 1997Article ID: Q168313 |
The information in this article applies to:
SYMPTOMSAdvanced: Requires expert coding, interoperability, and multiuser skills. When you use data access objects (DAO) to retrieve properties for linked TableDef objects, the process is much slower than when you use DAO to retrieve the properties for local Tabledef objects. This article assumes that you are familiar with Visual Basic for Applications and with creating Microsoft Access applications using the programming tools provided with Microsoft Access. For more information about Visual Basic for Applications, please refer to the "Building Applications with Microsoft Access 97" manual.
CAUSEThe Microsoft Jet database engine must create a temporary query for each property retrieval of a linked TableDef object. The Jet database engine does not need to do this when retrieving properties for local TableDef objects.
RESOLUTIONInstead of retrieving the properties for the linked TableDef objects in the current database, you can use DAO to open the database that the TableDef objects actually reside in, and then retrieve the properties. To accomplish this, follow steps 1 - 17 in the "Steps to Reproduce Behavior" section later in this article and substitute the following procedure for the procedure documented in step 15:
Sub EnumProperties(tDefName As String) Dim db As Database Dim tDef As TableDef Dim tDefSourceTableName As String Dim tDefProperty As Property Dim PropCount As Integer Dim dbPath As String Dim tDefField As Field Dim StartTime As Date, EndTime As Date StartTime = Now Set db = CurrentDb Set tDef = db.TableDefs(tDefName) If (tDef.Attributes And dbAttachedTable) <> 0 Then If InStr(tDef.Connect, ".mdb") > 0 Then tDefSourceTableName = tDef.SourceTableName dbPath = Right$(tDef.Connect, _ Len(tDef.Connect) - _ InStr(tDef.Connect, "=")) Set db = DBEngine(0).OpenDatabase(dbPath) Set tDef = db.TableDefs(tDefSourceTableName) End If End If For Each tDefProperty In tDef.Properties Next For Each tDefField In tDef.Fields For Each tDefProperty In tDefField.Properties PropCount = PropCount + 1 Next Next EndTime = Now Debug.Print Debug.Print "Table: " & tDef.Name Debug.Print "Number of Table and Field Properties: " & _ tDef.Properties.Count + PropCount Debug.Print "Total Time: " & _ DateDiff("s", StartTime, EndTime) & " second(s)" db.Close End Sub STATUSThis behavior is by design.
MORE INFORMATION
Steps to Reproduce BehaviorCAUTION: Following the steps in this example will modify the sample database Northwind.mdb. You may want to back up the Northwind.mdb file and perform these steps on a copy of the database.
Keywords : kbprg PgmHowTo MdlDao TblOthr Version : 97 Platform : WINDOWS Hardware : x86 Issue type : kbprb Solution Type : kbcode |
================================================================================
© 1998 Microsoft Corporation. All rights reserved. Terms of Use. |