Jamie's Software

Software & Utilities for Microsoft® Access®





Home
Access Articles
Downloads
Contact
Links
About

Image Albums
Overview
Screenshots
Requirements
Testimonials
FAQ
Download
Developers
Help

Property Editor
Download
Help

Form Resizer
Download
Help

Access Articles:
Using DAO with Microsoft® Access 2000 or Higher


Home | Access Articles | Downloads | Contact | Links | About
Products: Image Albums | Property Editor | Form Resizer


List All Access Articles

If you are used to programming in Access 97 then you may encounter a problem if you upgrade to Access 2000 or higher and you wish to continue to use the DAO object model in your VBA. If you try to run or compile your code you will probably be faced with the following error: "Compile error: User-defined type not defined" and you will notice that one of your DAO variables will be highlighted.

Fortunately this is easily remedied. The problem here is that your database does not have a reference set to the Microsoft DAO Object Library. With Access 97 this reference was already set by default, however Access 2000 and later versions have a reference set to the Microsoft ActiveX Data Objects Library instead. To set the necessary reference simply select Tools - References from the VBE code editor as shown in Figure 1.

Figure 1
Figure 1

If you scroll down the list of available libraries then you will eventually find the Microsoft DAO 3.6 Library as shown in Figure 2. (Version 3.6 is the newest version available). All you have to do is check the box next to this library and click on the OK button. You should now be able to compile your code by selecting Debug - Compile from the main menu.

Figure
Figure 2

Occasionally the problem might be that Access is unable to locate the reference, which will be indicated by the word "Missing" shown next to the reference location. If this is the case then uncheck the reference and close the references dialog. Next, open the references dialog again, locate the library from the list and re-check the reference that was missing.

While on the subject, it is also good practice to refer explicitly to your DAO variables with the term "DAO." as shown in the example function below, incase you decide to add ADO code to your database later on (this is known as disambiguation - and is shown in the following example).

'---------------------------------------------------------------------------------------
' Procedure : exampleDAOQuery
' DateTime : 31/01/2003
' Author : Jamie Czernik
' Purpose : Opens tblExample using the DAO model, returns the total
' number of records to this function. Safely destroys object variables
' to free up system resources.
'---------------------------------------------------------------------------------------

Function exampleDAOQuery() As Long

Dim dbs As DAO.Database
Dim rst As DAO.Recordset
Dim strQry As String

On Error GoTo exampleDAOQuery_Error

   Set dbs = CurrentDb()
   strQry = "SELECT Count(Column1) As numRecords from tblExample" 'SQL
   Set rst = dbs.OpenRecordset(strQry)
   With rst
        exampleDAOQuery = !numRecords 'return number of records to function
        .Close 'close the DAO recordset
   End With
   dbs.Close 'close the DAO database connection
   Set rst = Nothing 'free up system resources
   Set dbs = Nothing 'free up system resources

   On Error GoTo 0
   Exit Function


exampleDAOQuery_Error:

   MsgBox "Error " & Err.Number & " (" & Err.Description & ")", vbCritical

End Function

Finally, whether programming in Access 97, 2000 or later it is also recommended that you also explicitly close and destroy your DAO objects after use to free up system resources and prevent database bloat. This is accomplished using the "close" method and setting the object variable to "Nothing", shown at the end of the example function above.

Jamie Czernik BSc.
http://www.jamiessoftware.tk
(This article is provided "AS IS" with no warranties or guarantees.)

Further Help:

* Microsoft Knowledge Base Article - 186311

Home | Access Articles | Downloads | Contact | Links | About
Products: Image Albums | Property Editor | Form Resizer


Copyright Jamie Czernik 2004 -