ACC97: Failed Append Query Causes Bloat in Multi-User DatabaseID: Q174341
|
Moderate: Requires basic macro, coding, and interoperability skills.
Running an append query that fails causes the size of your database to
increase substantially. After compacting, the size of the database is much
smaller.
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.
The database is opened by multiple users, and the append query tried
to duplicate values in a unique index.
Open the database exclusively before running the append query.
-or-
Run the query using the Execute method with the dbFailOnError option in
a Visual Basic for Applications procedure. To use the Execute method in a
Visual Basic for Applications procedure, follow these steps:
Option Explicit
Sub AppendDuplicateRecords()
Dim db As Database
Dim qd As QueryDef
On Error GoTo AppendDuplicateRecords_Err
Set db = CurrentDb()
Set qd = db.QueryDefs!qryAppendToOrderDetails
qd.Execute dbFailOnError
AppendDuplicateRecords_Exit:
Exit Sub
AppendDuplicateRecords_Err:
MsgBox Error$
Resume AppendDuplicateRecords_Exit
End Sub
AppendDuplicateRecords
?FileLen(CurrentDb.Name)Note that the file size of Northwind.mdb is reported to be approximately 1,554,432 bytes.
Microsoft has confirmed this to be a problem in Microsoft Access 97.
All action queries (except append queries) write data to a temporary
database stored on your hard disk if the query is run inside a transaction
(default). When the transaction is finished, the data is purged from the
temporary database into your database. However, append queries write
directly to your database instead of to a temporary database.
You can use the Microsoft data access objects Execute method to work around
the problem because it differs from the way Microsoft Access requests the
database engine to execute the query. The method Microsoft Access uses
forces the database engine to allocate additional space to the database to
accommodate the records that could not be added when the append query
failed. In single-user databases, this problem does not occur because the
database engine is able to recycle the empty data pages currently allocated
and does not need to allocate additional space. However, in multi-user
databases, the database engine is not able to recycle empty data pages, and
allocates additional space to the database to compensate.
?FileLen(CurrentDb.Name)This function returns the file size in bytes of the currently opened database (Northwind.mdb). The file size of an unmodified copy of Northwind.mdb is approximately 1,542,144 bytes.
Query: qryAppendToOrderDetails
------------------------------
Type: Append Query
Field: Order Details.*
Table: Order Details
Sort:
Append To: Order Details.*
?FileLen(CurrentDb.Name)Note that the file size of Northwind.mdb is still reported to be 1,542,144 bytes, or slightly larger.
For more information about the Execute method, search the Help Index for "Execute method," or ask the Microsoft Access 97 Office Assistant.
Additional query words: pra size
Keywords : GnlMu QryAppnd RltRef
Version : WINDOWS:97
Platform : WINDOWS
Issue type : kbbug
Last Reviewed: May 13, 1999