Compartilhar via


Alterações de comportamento e os drivers ODBC 3.x

O atributo de ambiente SQL_ATTR_ODBC_VERSION indica ao driver se ele precisa exibir o comportamento do ODBC 2.x ou o comportamento do ODBC 3.x . A forma como o atributo de ambiente SQL_ATTR_ODBC_VERSION é definido depende do aplicativo. Os aplicativos ODBC 3.x devem chamar SQLSetEnvAttr para definir esse atributo depois de chamarEM SQLAllocHandle para alocar um identificador de ambiente e antes de chamarEM SQLAllocHandle para alocar um identificador de conexão. Se eles não fizerem isso, o Gerenciador de Driver retornará SQLSTATE HY010 (erro de sequência de funções) na última chamada para SQLAllocHandle.

Observação

Para obter mais informações sobre alterações comportamentais e como um aplicativo atua, consulte Alterações comportamentais.

Aplicativos ODBC 2.x e aplicativos ODBC 2.x recompilados com os arquivos de cabeçalho ODBC 3.x não chamam SQLSetEnvAttr. No entanto, eles chamam SQLAllocEnv em vez de SQLAllocHandle para alocar um identificador de ambiente. Portanto, quando o aplicativo chama SQLAllocEnv no Gerenciador de Driver, o Gerenciador de Driver chama SQLAllocHandle e SQLSetEnvAttr no driver. Portanto, os drivers ODBC 3.x sempre podem contar com esse atributo sendo definido.

Se um aplicativo compatível com padrões compilado com o sinalizador de compilação ODBC_STD chamar SQLAllocEnv (o que pode ocorrer porque SQLAllocEnv não foi preterido no ISO), a chamada será mapeada para SQLAllocHandleStd em tempo de compilação. Em tempo de execução, o aplicativo chama SQLAllocHandleStd. O Gerenciador de Driver define o atributo de ambiente SQL_ATTR_ODBC_VERSION como SQL_OV_ODBC3. Uma chamada para SQLAllocHandleStd é equivalente a uma chamada para SQLAllocHandle com um HandleType de SQL_HANDLE_ENV e uma chamada para SQLSetEnvAttr para definir SQL_ATTR_ODBC_VERSION como SQL_OV_ODBC3.

Em determinadas arquiteturas de driver, é necessário que o driver apareça como um driver ODBC 2.x ou um driver ODBC 3.x , dependendo da conexão. Nesse caso, o driver pode não ser realmente um driver, mas uma camada que reside entre o Gerenciador de Driver e outro driver. Por exemplo, ele pode imitar um driver, como o ODBC Spy. Em outro exemplo, ele pode atuar como um gateway, como EDA/SQL. Para aparecer como um driver ODBC 3.x , esse driver deve ser capaz de exportar SQLAllocHandle e aparecer como um driver ODBC 2.x , deve ser capaz de exportar SQLAllocConnect, SQLAllocEnv e SQLAllocStmt. Quando um ambiente, conexão ou instrução deve ser alocado, o Gerenciador de Driver verifica se esse driver exporta SQLAllocHandle. Como o driver faz, o Gerenciador de Driver chama SQLAllocHandle no driver. Se o driver estiver trabalhando com um driver ODBC 2.x , o driver deverá mapear a chamada para SQLAllocHandle para SQLAllocConnect, SQLAllocEnv ou SQLAllocStmt, conforme apropriado. Ele também não deve fazer nada com a chamada SQLSetEnvAttr ao se comportar como um driver ODBC 2.x .

Esta seção contém os seguintes tópicos.