Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Lembre-se que as aplicações não chamam diretamente as funções do driver. Em vez disso, chamam as funções do Driver Manager com o mesmo nome, e o Driver Manager chama as funções do driver. Normalmente, isto acontece quase imediatamente. Por exemplo, a aplicação chama SQLExecute no Gestor de Drivers e, após algumas verificações de erro, o Gestor de Drivers chama SQLExecute no driver.
O processo de ligação é diferente. Quando a aplicação chama SQLAllocHandle com as opções SQL_HANDLE_ENV e SQL_HANDLE_DBC, a função aloca handles apenas no Gestor de Drivers. O Gestor de Controladores não chama esta função no controlador porque não sabe a que controlador chamar. De forma semelhante, se a aplicação passar o handle de uma ligação não ligada para SQLSetConnectAttr ou SQLGetConnectAttr, apenas o Gestor de Drivers executa a função. Armazena ou obtém o valor do atributo do seu handle de ligação e retorna SQLSTATE 08003 (Conexão não aberta) ao obter um valor para um atributo que não foi definido e para o qual o ODBC não define um valor predefinido.
Quando a aplicação chama SQLConnect, SQLDriverConnect ou SQLBrowseConnect, o Gestor de Drivers determina primeiro qual o driver a utilizar. Depois, verifica se um driver está atualmente carregado na ligação:
Se nenhum driver for carregado na ligação, o Gestor de Drivers verifica se o driver especificado está carregado noutra ligação no mesmo ambiente. Caso contrário, o Gestor de Drivers carrega o driver na ligação e chama SQLAllocHandle no driver com a opção SQL_HANDLE_ENV.
Então, o Gestor de Drivers chama SQLAllocHandle no driver com a opção SQL_HANDLE_DBC, quer tenha sido carregado ou não. Se a aplicação definir algum atributo de ligação, o Gestor de Drivers chama SQLSetConnectAttr no driver; se ocorrer um erro, a função de ligação do Gestor de Drivers devolve SQLSTATE IM006 ( SQLSetConnectAttr do Driver falhou). Finalmente, o Gestor de Controladores chama a função de conexão no driver.
Se o driver especificado estiver carregado na ligação, o Driver Manager chama apenas a função de ligação no driver. Neste caso, o condutor deve garantir que todos os atributos da ligação mantêm as suas definições atuais.
Se um driver diferente for carregado na ligação, o Driver Manager chama SQLFreeHandle no driver para libertar a ligação. Se não houver outras ligações que utilizem o driver, o Driver Manager chama SQLFreeHandle no driver para libertar o ambiente e descarrega o driver. O Gestor de Drivers executa então as mesmas operações que quando um driver não está carregado na ligação.
O Gestor de Drivers bloqueará o handle de ambiente (henv) antes de chamar o SQLAllocHandle e SQLFreeHandle de um driver quando o HandleType for definido como SQL_HANDLE_DBC.
Quando a aplicação chama SQLDisconnect, o Gestor de Drivers chama SQLDisconnect no driver. No entanto, mantém o driver carregado caso a aplicação se reconecte ao driver. Quando a aplicação chama SQLFreeHandle com a opção SQL_HANDLE_DBC, o Gestor de Drivers chama SQLFreeHandle no driver. Se o driver não for utilizado por nenhuma outra ligação, o Gestor de Drivers então chama SQLFreeHandle no contexto do driver com a opção SQL_HANDLE_ENV e descarrega o driver.