ACC97: Manipulating Objects with DAO May Cause Database BloatID: Q172285
|
Advanced: Requires expert coding, interoperability, and multiuser skills.
When you use Data Access Objects (DAO) to create objects in a database,
the size of the database increases substantially during the operation.
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.
Use SQL Data Definition Language (DDL) statements rather than DAO to
create or modify database objects. For example, you can use the following
procedure to work around the behavior demonstrated in the "Steps to
Reproduce Problem" section later in this article:
Sub CreateTables()
Dim db As Database
Dim sql As String
Dim i As Integer, j As Integer
Set db = CurrentDb()
For i = 1 To 20
sql = "CREATE TABLE Table" & i & " ("
For j = 1 To 200
sql = sql & "Field" & j & " TEXT,"
Next
sql = Left$(sql, Len(sql) - 1) & ");"
db.Execute sql
Next
Application.RefreshDatabaseWindow
End Sub
Microsoft has confirmed this to be a problem in Microsoft Access 97.
This behavior typically occurs when using DAO to create or modify a large number of database objects. The following example demonstrates this by using DAO to create twenty tables, each with two hundred fields. In this example, reducing the number of fields created in the example greatly reduces the amount of database bloat.
Option Explicit
Sub CreateTables()
Dim db As Database
Dim t As TableDef
Dim f As Field
Dim i As Integer, j As Integer
Set db = CurrentDb()
For i = 1 To 20
Set t = db.CreateTableDef("Table" & i)
For j = 1 To 200
Set f = t.CreateField("Field" & j)
f.Type = dbText
f.size = 50
t.Fields.Append f
Next
db.TableDefs.Append t
Next
Application.RefreshDatabaseWindow
End Sub
CreateTables
For more information about DDL queries, search the Help Index for "data-definition queries," or ask the Microsoft Access 97 Office Assistant.
Keywords : kbusage MdlDao
Version : 97
Platform : WINDOWS
Issue type : kbbug
Last Reviewed: April 19, 1999