Antes de nada, gracias por responder a las dudas que tenemos los que empezamos en esto. Estoy desarrollando una aplicación en C++ (MS Visual c++ 6.0) que accede a una bd usando ole db. El problema es que tengo valores con acentos como "bellvís" y al lanzarle la consulta: pRecordset->Open(strQuery, _variant_t((IDispatch*)pConnection, true), adOpenStatic, adLockReadOnly, adCmdText);
Me dice que no ha encontrado nada, he probado a enviarle "bellvís" y "bellvis" pero no funciona. He debugado la aplicación y el strQuery está bien formado. He escuchado algo de Unicode, pero la verdad es que no tengo ni idea de como resolver el problema.
He estado comprobando algo al respecto, y desde luego el uso de unicode no soluciona tu problema, ya que se trata de una tecnología para comprimir datos en campos de texto y/o memo. Creo que la solución la puedes encontrar más en la linea del estándar ansi-92 que es la norma que utiliza el motor de Access a partir de la versión 97 y SQl Server. En cualquier caso, yo me crearía una función para sustituir las vocales acentuadas por el carácter % que es el que admite la norma, y en el caso de encontrar un registro con un acento, sustituirle por este carácter, en tu ejemplo deberás sustituir Bellvís por Beelv%s. A continuación te voy a mostrar la información que Microsoft ofrece, en castellano, en relación a Access y la norma ansi: Uso de la sintaxis ANSI SQL 92 en los proyectos de Access y las páginas de acceso a datos Los proyectos (. Adp) y las páginas de acceso a datos de Microsoft Access 2002 admiten exclusivamente el estándar ANSI SQL-92. Esto afectará a la manera en que se desarrollan las expresiones de filtro y consultas en los proyectos de Access. Los conjuntos de datos de resultados también se mostrarán de manera diferente en las páginas de acceso a datos. Las versiones anteriores de Access admitían la sintaxis ANSI SQL-89. Para obtener más información sobre las diferencias entre la sintaxis de los caracteres comodín ANSI SQL-89 y ANSI SQL-92, consulte la Ayuda de Microsoft Access. Filtros y consultas en un proyecto de Access Los proyectos de Access están diseñados para conectarse a una base de datos de servidor de Microsoft SQL Server o Microsoft SQL Server 2000 Desktop Engine (antiguamente MSDE). SQL (Lenguaje de consulta estándar) es un lenguaje de programación interactivo estándar para trabajar con bases de datos relacionales. El lenguaje Transact-SQL es el dialecto SQL nativo utilizado por SQL Server y Desktop Engine. Transact-SQL admite ANSI SQL-92, el último estándar SQL. Los proyectos de Access 2002 que ejecutan consultas o expresiones de filtro en los datos de SQL Server deben hacerlo con la sintaxis ANSI SQL-92. Las bases de datos de Access utilizan el motor de base de datos Jet para realizar consultas en los datos nativos. Jet admite el estándar ANSI SQL-89 (de ahora en adelante, sintaxis SQL de Jet). La sintaxis SQL de Jet se diferencia del estándar ANSI SQL-92 en varios aspectos. Por ejemplo, la sintaxis SQL de Jet utiliza un asterisco (*) para un comodín de varios caracteres, mientras que la sintaxis ANSI SQL-92 utiliza el signo de porcentaje (%). Por ejemplo, la sintaxis SQL de Jet para devolver todos los clientes de un país que comienza con la letra U: SELECT * FROM Customers WHERE Country Like 'U*' La sintaxis ANSI SQL-92 para devolver todos los clientes de un país que comienza con la letra U: SELECT * FROM Customers WHERE Country Like 'U%' De manera similar, las expresiones de filtro en los proyectos de Access 2002 utilizan el estándar ANSI SQL-92. Si migra proyectos de versiones anteriores de Access a Access 2002, deberá comprobar todas las expresiones para asegurarse de que devuelvan los resultados esperados. Por ejemplo, si tenía una expresión de macro que buscaba CustomerName = 'B*', ya no encontrará todos los nombres de clientes que comiencen con la letra B ya que el asterisco (*) no es un carácter comodín de ANSI SQL-92. Para resolverlo, revise la expresión de macro de modo que se utilice el signo de porcentaje (%) como carácter comodín: CustomerName = 'B%'. Conjuntos de datos de resultados en páginas de acceso a datos El motor de base de datos Jet se utiliza para trabajar con los datos de una base de datos de Access (.mdb) y admite el estándar ANSI SQL-89. Sin embargo, las páginas de acceso a datos en las bases de datos de Access se conectan con Jet mediante objetos de datos ActiveX (ADO) y el proveedor OLEDB de Jet. ADO y OLEDB siempre utilizan la sintaxis ANSI SQL-92. Por consiguiente, las páginas de acceso a datos deben utilizar la sintaxis ANSI SQL-92. Esto significa que un formulario y una página dependientes de la misma consulta pueden devolver conjuntos de datos de resultados diferentes.