Difference between revisions of "MS Access and MySQL/connecting"

from HTYP, the free directory anyone can edit if they can prove to me that they're not a spambot
Jump to navigation Jump to search
(moved data types over to "migration" page)
m (layout tweaks)
Line 3: Line 3:
  
 
The basic technique is to set up your [[MySQL]] server as a data source via [[ODBC]]. Then, in MS Access, you link to the tables you want in the ODBC data source.
 
The basic technique is to set up your [[MySQL]] server as a data source via [[ODBC]]. Then, in MS Access, you link to the tables you want in the ODBC data source.
===Instructions===
+
 
 
* [[adding an ODBC data source in Windows 98]] (the process should be similar for later versions of Windows)
 
* [[adding an ODBC data source in Windows 98]] (the process should be similar for later versions of Windows)
 
* [[connecting to an ODBC data source in MS Access 97]] (the process should be similar for later versions of Windows and MS Access)
 
* [[connecting to an ODBC data source in MS Access 97]] (the process should be similar for later versions of Windows and MS Access)
===Problems Solved===
+
==Problems Solved==
 
===Update error===
 
===Update error===
 
I ran into a problem writing records using [[DAO (Microsoft)|DAO]]. On "Update", an error message stated that another user is trying to write to the same data. The error message:
 
I ran into a problem writing records using [[DAO (Microsoft)|DAO]]. On "Update", an error message stated that another user is trying to write to the same data. The error message:

Revision as of 01:40, 9 November 2008

Overview

It is possible to use Microsoft Access as a client – or as an intermediary for Visual Basic code – while using MySQL as the database engine. This provides a somewhat less bumpy migration path for VB/VBA applications.

The basic technique is to set up your MySQL server as a data source via ODBC. Then, in MS Access, you link to the tables you want in the ODBC data source.

Problems Solved

Update error

I ran into a problem writing records using DAO. On "Update", an error message stated that another user is trying to write to the same data. The error message:

MS Access error 3197.png

This happens under at least two different circumstances.

In one of them. the code was opening a new recordset each time, which apparently I could get away with when the database was local. I also added a timestamp field to the table as recommended here; it remains to be seen if that was necessary.

In another, I couldn't figure out why the message was occurring, but the data was actually being written properly, so I just inserted an "On Error" pair around the line where the error was occurring:

On Error Resume Next
...
On Error Goto 0

FindFirst is slow

Opening an ODBC table as a DAO recordset and then using FindFirst() on that recordset can be immensely slow, taking minutes or hours for larger datasets. (This would seem to indicate that FindFirst() is requesting records one at a time and checking each one for a match, rather than passing the filter request to the remote server or even reading the entire dataset into memory before searching it.)

The alternative, which turns out to be very quick, is to use a query to open a recordset containing just the record(s) you want, using CurrentDb.OpenRecordset(). Even if each record is created and opened separately, this is still much faster than Recordset.FindFirst().