2
votes

I need to setup a docker container in which a legacy application needs to connect to an MS-Access 2003 DB. The connectionstring to the DB is embedded in the application itself and therefore cannot be changed. So I cannot change the provider to be ACE.OleDb either.

I have created docker images based on …

  • microsoft/dotnet-framework
  • microsoft/windowsservercore
  • microsoft/mssql-server-windows-express

… but I always get the same result when running the legacy application on the container.

The 'Microsoft.Jet.OLEDB.4.0' provider is not registered on the local machine.

I also tried to register the msjetoledb40.dll in SysWow64 with the following command in the container ...

C:\Windows\SysWow64\regsvr32 Msjetoledb40.dll

... but does not seem to work either.

I have also installed the Microsoft Access Database Engine Redistributable (2007, 2010 & 2016) in 32 and 64 bit (AccessDatabaseEngine.exe & AccessDatabaseEngine_X64.exe) but always get the same error as mentioned above.

2007 Office System Driver: Data Connectivity Components

Microsoft Access Database Engine 2010 Redistributable

Microsoft Access Database Engine 2016 Redistributable

Any ideas?

1
Hi David, I developed a simple app that connects to MS-Access-2003 db where I can change the connectionstring. Fails with Jet.Oledb and succeeds with Ace.Oledb provider. But as I mentioned in the original post I cannot change the connectionstring of the legacy app since it is embedded in the dll. I know this can run in a 64bit OS since it works fine in my dev-comptuer using Windows 10 64bit and my dev.computer has already registered the msjetoledb40.dll in SysWow64. This is the real issue since I cannot register this dll in any Win-Docker-Container or even in a Hyper-V WinServerCore VM. TxMiky

1 Answers

2
votes

SOLVED:

I found a 'Jet 4.0 Service Pack 8 (SP8) for Windows 95/98/NT 4.0 (KB829558)' package.

Copied the Jet40SP8_9xNT.exe to the container and added this statement to the dockerfile

RUN Jet40SP8_9xNT.exe /Q