¿Es posible especificar la dll del controlador directamente en la cadena de conexión ODBC?

Estoy tratando de usar pyodbc para conectarse a un servidor SQL (MS SQL Server a través de FreeTDS) en una aplicación portátil; ya que se supone que es independiente, me gustaría evitar tener que instalar explícitamente el controlador en el sistema, simplemente llevando la dll del controlador ODBC a lo largo de la aplicación.

Esta página sugiere que es posible especificar la dll del controlador directamente en la cadena de conexión

  • Especifique el parámetro DRIVER= en el argumento szConnStrIn de la función SQLDriverConnect . Por ejemplo:

     szConnStrIn = "driver=ospath/dbodbc6.dll;dbf=c:\asademo.db" 

    donde ospath es el subdirectorio del sistema operativo de su directorio de instalación de Adaptive Server Anywhere.

Probar a través de pyodbc + libtdsodbc.so en Linux, funciona bien; sin embargo, al intentar lo mismo en Windows (pyodbc + tdsodbc.dll ) siempre obtengo

Pyodbc.Error: (‘IM002’, ‘[IM002] [Microsoft] [ODBC Driver Manager] No se encontró el nombre de la fuente de datos y no se especificó un controlador predeterminado (0) (SQLDriverConnect)’)

( libtdsodbc.so mi libtdsodbc.so parece estar bien, ya que si lo instalo como un controlador “normal” y lo remito con su nombre, se conecta bien)

Al revisar la documentación de SQLDriverConnect y las páginas relacionadas, no se menciona la opción DRIVER= utilizada directamente con la ruta dll.

Entonces, ¿no es compatible la conexión “directo al controlador-dll” en Windows? ¿Hay alguna alternativa, especialmente con Python, para conectarse directamente a la dll del controlador, sin pasar por el administrador del controlador ODBC?

Es probable que sea imposible solucionar este problema ahora, 2.5 años después, pero mi mejor suposición sería un error tipográfico o de permisos en el libtdsodbc.so no registrado, o algún otro error en su llamada a SQLDriverConnect() (que no proporcionó, por lo que no puede analizado).

Creo que no debe haber leído la documentación de SQLDriverConnect() detenida o completamente, ya que incluye explícitamente DRIVER en el EBNF de SQLDriverConnect()

empty-string ::=attribute ::= attribute-keyword=attribute-value | DRIVER=[{]attribute-value[}]

– y lo analiza más detalladamente en los detalles de la sección “Comentarios” .

Tenga en cuenta que esto no “pasa por alto el controlador de controlador ODBC”, aunque sí realiza una conexión sin DSN (por lo que no hace referencia a los árboles de registro odbc.ini en Windows, ni a los archivos odbc.ini en otro sistema operativo) .