MsAccess xHarbour 32 Harbour 64

Post Reply
cpheraclio
Posts: 26
Joined: Thu Mar 17, 2022 6:47 pm

MsAccess xHarbour 32 Harbour 64

Post by cpheraclio »

Con xHarbour y BCC 7.6 funciona perfecto 32 bits

oCn:=FW_OpenAdoConnection("C:\NOMINA\EMPRESA\datos.mdb,mypassword",.T.)

Harbour Visual Studio 2022 64 bits, solo envía mensaje "error"

Lo he intentado de varias formas sin resultado
https://www.connectionstrings.com/access/
con ejemplos del foro

Alguien lo ha logrado con Herbour de 64 bits?

Saludos
Heraclio

User avatar
Antonio Linares
Site Admin
Posts: 44515
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Contact:

Re: MsAccess xHarbour 32 Harbour 64

Post by Antonio Linares »

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:

Code: Select all | Expand

oCn := FW_OpenAdoConnection("C:\NOMINA\EMPRESA\datos.mdb,mypassword", .T.)

A una conexión explícita usando el proveedor ACE:

Code: Select all | Expand

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ística32 Bits (xHarbour/BCC)64 Bits (Harbour/MSVC) ProviderMicrosoft.Jet.OLEDB.4.0Microsoft.ACE.OLEDB.12.0 Driver requeridoViene con Windows (default)Requiere instalación manual (Access DB Engine x64) CompatibilidadOffice 32 bitsOffice 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.

regards, saludos

Antonio Linares
www.fivetechsoft.com
cpheraclio
Posts: 26
Joined: Thu Mar 17, 2022 6:47 pm

Re: MsAccess xHarbour 32 Harbour 64

Post by cpheraclio »

Antonio, muchas gracias por la respuesta.

Saludos.

Post Reply