I am migrating customers from:
Windows 2000 Server (fully patched)
Internet Information Services (IIS) 5
ColdFusion 5
to:
Windows Server 2003 Standard x64 Edition (fully patched)
Internet Information Services (IIS) 6 (running in 32-bit
mode)
ColdFusion MX 7 (7.0.2) Standard
Unfortunately, some of these existing customers are still
using Microsoft Access databases instead of SQL Server. Having all
of these existing customers migrate to SQL Server is not yet
practical. On the old Windows 2000 / ColdFusion 5 server, they are
using OLE DB data sources to reference the MS Access databases
using the "Microsoft.Jet.OLEDB.4.0" provider. None are configured
to use ODBC drivers when referencing MS Access or SQL Server.
I have yet to figure out how to get ColdFusion MX 7 to:
- Create a data source that references MS Access databases on
64-bit Windows.
- Reference an existing MS Access data source created with
the 32-bit version of the ODBC Data Source Manager on 64-bit
Windows.
A bit of background information regarding MS Access on 64-bit
Windows:
- At the time of this writing, Microsoft has not
created/released 64-bit drivers for Microsoft Access and it's
unlikely they ever will, for understandable reasons.
- Contrary to seemingly popular belief, the Microsoft Jet 4.0
Database Engine does exist on 64-bit Windows. See the following
regarding version and file location information:
How to obtain the latest service pack for the Microsoft Jet
4.0 Database Engine
http://support.microsoft.com/kb/239114- You CAN create MS Access based data sources within 64-bit
Windows, but they have to be made using the 32-bit version of "ODBC
Data Source Manager". I'm assuming these DSNs may only be used by
32-bit applications, but I have not tested that theory.
32-bit data sources:
ODBC Data Source Manager:
%SystemRoot%\SysWOW64\odbcad32.exe
Registry location:
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ODBC
Default file DSN directory:
C:\Program Files (x86)\Common Files\ODBC\Data Sources
64-bit data sources:
ODBC Data Source Manager:
%SystemRoot%\system32\odbcad32.exe
Registry location:
HKEY_LOCAL_MACHINE\SOFTWARE\ODBC
Default file DSN directory:
C:\Program Files\Common Files\ODBC\Data Sources
The 64-bit version of "ODBC Data Source Manager" (under
Administrative Tools) only show "SQL Server" and/or "SQL Native
Client" as options when creating new data sources, unless
third-party software is installed that supplies additional drivers.
The 32-bit version of "ODBC Data Source Manager" (by default,
there is no shortcut for this in the Start menu) shows the typical
drivers seen on 32-bit versions of Windows, including SQL Server,
SQL Native Client, Microsoft Access, Excel, FoxPro, Paradox, etc.
When using ColdFusion Administrator in ColdFusion MX 7.0.2 in
64-bit Windows 2003 (IIS is running in 32-bit mode to allow
ColdFusion MX 7 to function at all), two problems are encountered
when dealing with MS Access (and presumably other 32-bit drivers).
In both cases, ColdFusion is trying to reference the registry
location for 64-bit data sources instead of 32-bit:
1. Creating a new data source within ColdFusion
Administrator:
Data Source Name: whatever
Driver: Microsoft Access
CF Data Source Name: whatever
Database file: (physical path to whatever.mdb)
(other settings are irrelvant for this example)
Error generated when submitting:
Unable to update the NT registry.
Cannot open HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\ODBC
Data Sources: Windows error number 5 occurred.Access is denied.
ColdFusion stores the data source, however a "verify"
generates the following error:
Connection verification failed for data source: whatever
java.sql.SQLException: [Macromedia][SequeLink JDBC
Driver][ODBC Socket]internal error: Data source name not found and
no default driver specified
The root cause was that: java.sql.SQLException:
[Macromedia][SequeLink JDBC Driver][ODBC Socket]internal error:
Data source name not found and no default driver specified
2. Creating the data source using the 32-bit version of "ODBC
Data Source Manager" then trying to reference it with ColdFusion:
ODBC Data Source Manager:
System DSN or File DSN:
Name: whatever
Driver: Microsoft Access Driver (.mdb)
Database: (physical path to whatever.mdb)
(creation is successful within ODBC Data Source Manager)
Reference the above DSN within ColdFusion Administrator:
Data Source Name: whatever
Driver: ODBC Socket
Error generated when submitting:
Error accessing available odbc datasources. - Cannot open
HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\ODBC Data Sources:
Windows error 2 occurred.The system cannot find the file specified.
ColdFusion MX 7 can't find the 32-bit data source on 64-bit
Windows because it's looking for it in the wrong registry location.
Can ColdFusion MX 7 be configured to look in
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\ODBC
instead of
HKEY_LOCAL_MACHINE\SOFTWARE\ODBC
on a 64-bit Windows machine?