Estimado Heraclio,
El problema que est谩s experimentando es un cl谩sico en la migraci贸n de 32 a 64 bits. No es un error de tu c贸digo ni de Harbour en s铆, sino una limitaci贸n de los controladores de base de datos de Windows.
Aqu铆 tienes la explicaci贸n t茅cnica y la soluci贸n paso a paso.
-----
La Causa Ra铆z
El proveedor que has usado siempre, Microsoft.Jet.OLEDB.4.0 (para archivos .mdb), solo existe en versi贸n de 32 bits. No existe una versi贸n de 64 bits de este motor.
Al compilar tu aplicaci贸n en 64 bits (Visual Studio), tu programa intenta cargar una DLL de 32 bits, lo cual es imposible en Windows, provocando el fallo inmediato.
La Soluci贸n: Usar el motor "ACE"
Para conectar a Access (ya sea .mdb o .accdb) desde una aplicaci贸n de 64 bits, debes usar el proveedor Microsoft.ACE.OLEDB.12.0 (o 16.0).
Sigue estos pasos para solucionarlo:
1\. Instalar el motor de base de datos de 64 bits
Necesitas instalar el "Microsoft Access Database Engine" en su versi贸n de 64 bits.
- Descarga: Busca en Google "Microsoft Access Database Engine 2010 Redistributable" o "2016 Redistributable".
- Importante: Si tienes instalado Microsoft Office de 32 bits en esa misma m谩quina, el instalador de 64 bits te dar谩 error. Para forzar la instalaci贸n, debes ejecutar el instalador desde la l铆nea de comandos con el par谩metro pasivo:
AccessDatabaseEngine_x64.exe /passive
2\. Cambiar la cadena de conexi贸n
FW_OpenAdoConnection de FiveWin intenta a menudo adivinar el proveedor. Para 64 bits, es mejor ser expl铆cito o construir la cadena t煤 mismo.
Intenta cambiar tu c贸digo de esto:
oCn := FW_OpenAdoConnection("C:\NOMINA\EMPRESA\datos.mdb,mypassword", .T.)
A una conexi贸n expl铆cita usando el proveedor ACE:
local cStr, oCn, oError
// Nota el cambio de Provider a Microsoft.ACE.OLEDB.12.0
cStr := "Provider=Microsoft.ACE.OLEDB.12.0;" + ;
"Data Source=C:\NOMINA\EMPRESA\datos.mdb;" + ;
"Jet OLEDB:Database Password=mypassword;" + ;
"Persist Security Info=False;"
TRY
oCn := CreateObject( "ADODB.Connection" )
oCn:Open( cStr )
? "Conexi贸n 64 bits exitosa"
CATCH oError
? "Error:", oError:Description
END
Nota: Aunque tu archivo sea .mdb (formato viejo), el motor ACE.OLEDB.12.0 es capaz de leerlo perfectamente, pero necesitas indic谩rselo en el "Provider".
-----
Resumen de diferencias
| Caracter铆stica | 32 Bits (xHarbour/BCC) | 64 Bits (Harbour/MSVC) |
| Provider | Microsoft.Jet.OLEDB.4.0 | Microsoft.ACE.OLEDB.12.0 |
| Driver requerido | Viene con Windows (default) | Requiere instalaci贸n manual (Access DB Engine x64) |
| Compatibilidad | Office 32 bits | Office 64 bits (o instalaci贸n con /passive) |
驴Qu茅 pasa si FW_OpenAdoConnection falla?
Si la funci贸n nativa de FiveWin FW_OpenAdoConnection sigue fallando incluso con el driver instalado, es posible que la funci贸n internamente est茅 forzando el uso de "Jet". En ese caso, usa la creaci贸n del objeto ADODB.Connection manualmente como te mostr茅 en el ejemplo de c贸digo arriba. Funciona exactamente igual para el resto de tu l贸gica.