Cambios de comportamiento y controladores ODBC 3.x
El atributo de entorno SQL_ATTR_ODBC_VERSION indica al controlador si necesita mostrar el comportamiento odbc 2.x o el comportamiento de ODBC 3.x . La forma en que se establece el atributo de entorno SQL_ATTR_ODBC_VERSION depende de la aplicación. Las aplicaciones ODBC 3.x deben llamar a SQLSetEnvAttr para establecer este atributo después de llamar a SQLAllocHandle para asignar un identificador de entorno y antes de llamar a SQLAllocHandle para asignar un identificador de conexión. Si no lo hacen, el Administrador de controladores devuelve SQLSTATE HY010 (error de secuencia de función) en la última llamada a SQLAllocHandle.
Nota
Para obtener más información sobre los cambios de comportamiento y cómo actúa una aplicación, consulte Cambios de comportamiento.
Las aplicaciones ODBC 2.x y las aplicaciones ODBC 2.x se vuelven a compilar con los archivos de encabezado ODBC 3.x no llaman a SQLSetEnvAttr. Sin embargo, llaman a SQLAllocEnv en lugar de SQLAllocHandle para asignar un identificador de entorno. Por lo tanto, cuando la aplicación llama a SQLAllocEnv en el Administrador de controladores, el Administrador de controladores llama a SQLAllocHandle y SQLSetEnvAttr en el controlador. Por lo tanto, los controladores ODBC 3.x siempre pueden contar con este atributo que se establece.
Si una aplicación compatible con estándares compilada con la marca de compilación ODBC_STD llama a SQLAllocEnv (que puede producirse porque SQLAllocEnv no está en desuso en ISO), la llamada se asigna a SQLAllocHandleStd en tiempo de compilación. En tiempo de ejecución, la aplicación llama a SQLAllocHandleStd. El Administrador de controladores establece el atributo de entorno de SQL_ATTR_ODBC_VERSION en SQL_OV_ODBC3. Una llamada a SQLAllocHandleStd equivale a una llamada a SQLAllocHandle con un HandleType de SQL_HANDLE_ENV y una llamada a SQLSetEnvAttr para establecer SQL_ATTR_ODBC_VERSION en SQL_OV_ODBC3.
En determinadas arquitecturas de controladores, es necesario que el controlador aparezca como un controlador ODBC 2.x o un controlador ODBC 3.x , en función de la conexión. El controlador en este caso podría no ser realmente un controlador, sino una capa que reside entre el Administrador de controladores y otro controlador. Por ejemplo, podría imitar un controlador, como ODBC Spy. En otro ejemplo, podría actuar como puerta de enlace, como EDA/SQL. Para que aparezca como un controlador ODBC 3.x , este controlador debe poder exportar SQLAllocHandle y aparecer como un controlador ODBC 2.x , debe poder exportar SQLAllocConnect, SQLAllocEnv y SQLAllocStmt. Cuando se asigna un entorno, una conexión o una instrucción, el Administrador de controladores comprueba si este controlador exporta SQLAllocHandle. Como lo hace el controlador, el Administrador de controladores llama a SQLAllocHandle en el controlador. Si el controlador está trabajando con un controlador ODBC 2.x , el controlador debe asignar la llamada a SQLAllocHandle a SQLAllocConnect, SQLAllocEnv o SQLAllocStmt, según corresponda. Tampoco debe hacer nada con la llamada SQLSetEnvAttr cuando se comporta como un controlador ODBC 2.x .
Esta sección contiene los temas siguientes.