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.
Depois de conhecido o nível básico de interoperabilidade, devem ser consideradas as funcionalidades da base de dados utilizadas pela aplicação. Por exemplo, que instruções SQL irá a aplicação executar? A aplicação vai usar cursores roláveis? Transações? Procedimentos? Dados longos? Para obter ideias sobre quais funcionalidades podem não ser suportadas por todos os Sistemas de Gestão de Base de Dados, consulte as descrições das funções SQLGetInfo, SQLSetConnectAttr e SQLSetStmtAttr, e o Apêndice C: Gramática SQL. As funcionalidades que uma aplicação exige podem eliminar alguns SGBDs da lista de SGBDs alvo. Também podem mostrar que a aplicação pode facilmente compatibilizar-se com muitos sistemas de gestão de bases de dados (SGBDs).
Por exemplo, se as funcionalidades exigidas forem simples, normalmente podem ser implementadas com um elevado grau de interoperabilidade. Uma aplicação que executa uma simples instrução SELECT e recupera resultados com um cursor apenas para a frente é provavelmente altamente interoperável devido à sua simplicidade: quase todos os drivers e SGBD suportam a funcionalidade necessária.
No entanto, se as funcionalidades necessárias forem mais complexas, como cursores deslizantes, instruções de atualização e eliminação posicionadas e procedimentos, é frequentemente necessário fazer compromissos. Existem várias possibilidades:
Menor interoperabilidade, mais funcionalidades. A aplicação inclui as funcionalidades, mas funciona apenas com SGBDs que as suportam.
Maior interoperabilidade, menos funcionalidades. A aplicação elimina as funcionalidades mas funciona com mais SGBD.
Maior interoperabilidade, funcionalidades opcionais. A aplicação inclui as funcionalidades, mas torna-as disponíveis apenas com os SGBD que as suportam.
Maior interoperabilidade, mais funcionalidades. A aplicação utiliza as funcionalidades com SGBDs que as suportam e emula-as para SGBDs que não as suportam.
Os dois primeiros casos são relativamente simples de implementar, porque as funcionalidades são usadas ou com todos os SGBDs suportados, ou com nenhum. Os dois últimos casos, por outro lado, são mais complexos. É necessário, em ambos os casos, verificar se o SGBD suporta as funcionalidades e, no último caso, escrever uma quantidade potencialmente grande de código para emular essas funcionalidades. Portanto, estes esquemas provavelmente exigirão mais tempo de desenvolvimento e podem ser mais lentos em tempo de execução.
Considere uma aplicação de consulta genérica que pode ligar-se a uma única fonte de dados. A aplicação aceita uma consulta do utilizador e apresenta os resultados numa janela. Agora suponha que esta aplicação tem uma funcionalidade que permite aos utilizadores mostrar os resultados de múltiplas consultas simultaneamente. Ou seja, podem executar uma consulta e olhar para alguns dos resultados, executar uma consulta diferente e analisar alguns dos seus resultados, e depois regressar à primeira consulta. Isto apresenta um problema de interoperabilidade porque alguns drivers suportam apenas uma única instrução ativa.
A aplicação tem várias opções, com base no que o driver devolve para a opção SQL_MAX_CONCURRENT_ACTIVITIES em SQLGetInfo:
Suporte sempre múltiplas consultas. Depois de estabelecer ligação a um driver, o programa verifica o número de instruções ativas. Se o driver suportar apenas uma instrução ativa, a aplicação fecha a ligação e informa o utilizador de que o driver não suporta a funcionalidade necessária. A aplicação é fácil de implementar e tem funcionalidade completa, mas tem menor interoperabilidade.
Nunca suportes múltiplas consultas. A aplicação elimina completamente a funcionalidade. É fácil de implementar e tem elevada interoperabilidade, mas tem menos funcionalidades.
Suporte múltiplas consultas apenas se o driver o permitir. Depois de se conectar a um driver, a aplicação verifica o número de instruções ativas. A aplicação permite ao utilizador iniciar uma nova declaração quando uma já está ativa, apenas se o driver suportar múltiplas declarações ativas. A aplicação tem maior funcionalidade e interoperabilidade, mas é mais difícil de implementar.
Suporta sempre múltiplas consultas e emula-as quando necessário. Depois de estabelecer ligação com um driver, a aplicação verifica o número de instruções ativas. A aplicação permite sempre ao utilizador iniciar uma nova instrução quando uma já está ativa. Se o driver suportar apenas uma instrução ativa, a aplicação abre uma ligação adicional a esse driver e executa a nova instrução nessa ligação. A aplicação tem funcionalidade total e elevada interoperabilidade, mas é mais difícil de implementar.