Uma visão Geral sobre ODBC

Autor: Vidal Martins

ODBC significa Open Database Connectivity. É uma especificação de interface para acesso a dados, elaborada por grupos de padronização como X/Open e SQL Access Group. Essa especificação provê funções para conectar e desconectar fontes de dados, preparar e executar comandos, processar erros e processar transações.

Em termos práticos, a ODBC permite que uma aplicação acesse simultaneamente uma variedade de SGBD´s, relacionais e não relacionais, situados em locais diferentes, através de uma única API (Application Programming Interface). Além disso, ela padroniza as mensagens de erro, a interface de conexão com as fontes de dados, os tipos de dados e, até mesmo, a linguagem SQL utilizada, o que significa maior portabilidade do aplicativo.

A arquitetura ODBC possui quatro componentes, conforme mostra a figura abaixo.

Aplicação: um programa que chama funções ODBC para interagir com fontes de dados.

Driver Manager: uma DLL (Dynamic-Link Library) que provê acesso aos drivers ODBC. O Driver Manager carrega as DLL´s dos drivers e direciona chamadas a funções ODBC ao driver correto. Ele também verifica algumas condições de erro e processa algumas chamadas a funções ODBC.

Driver: uma DLL que processa chamadas a funções ODBC. O driver conecta uma fonte de dados, traduz comandos SQL e os submete à fonte de dados, recupera informações da fonte de dados e retorna dados para a aplicação. Se um SGBD, como Xbase, não usa SQL, o driver também tem que processar os comandos SQL.

Fonte de Dados: os dados que um usuário deseja acessar, o SGBD associado, a plataforma na qual reside o SGBD, e a rede usada para acessar a plataforma. Por exemplo, uma fonte de dados pode ser um SGBD Oracle, rodando sobre sistema operacional OS/2, acessado por Novell Netware; ou um arquivo Xbase local, para o qual o driver serve como SGBD; entre outros.

Existe um subconjunto da gramática SQL que é chamado SQL Mínimo. O SQL Mínimo acrescido de algumas funcionalidades forma o SQL Núcleo. A gramática completa do SQL é conhecida como SQL Estendido. Da mesma forma, existe um subconjunto da API ODBC que é chamado de API Núcleo. Adicione algumas funções à API e você terá a API Nível 1. A API completa é chamada de API Nível 2.

Um driver pode ser escrito para ter conformidade com um certo nível de API e com um determinado nível de SQL. Por exemplo, existe um driver para o SQL Server 4.21 que tem conformidade com a API Nível 1 e com o SQL Mínimo.

Quando se diz que um driver é compatível com o nível 1, isto significa que ele implementa toda a API Nível 1. Porém, o driver pode também implementar algumas características da API Nível 2, isso não é proibido. Da mesma forma, se um driver é compatível com SQL Mínimo, isto significa que ele pode implementar muitas outras características do SQL Núcleo e do SQL Estendido, mas não todas. As aplicações podem consultar o próprio driver para identificar seu nível de conformidade com API e SQL e, então, usar essa informação para escalar a capacidade do driver.

Uma aplicação simples deve realizar as seguintes tarefas, para interagir com uma fonte de dados:

  1. Conectar com a fonte de dados. Para isso, deve-se especificar o nome da fonte de dados e informações adicionais, tais como: login id, password, nome do banco de dados, etc.
  2. Colocar o comando SQL em um buffer e estabelecer os valores dos parâmetros, caso o comando inclua marcadores de parâmetros.
  3. Chamar uma função da API para executar o comando.
  4. O backend, ou o driver, vai processar o comando SQL. Esse comando pode retornar resultados (SELECT), não retornar nada (INSERT, UPDATE, DELETE), ou retornar mensagens de erro. Nos casos em que não há erro, o comando SQL pode retornar mensagens informativas.
  5. Se o comando retornar um result set, a aplicação deve associar um nome de cursor ao comando, ou permitir que o driver faça isso. A aplicação pode analisar os atributos do result set, tais como: o número de colunas, o nome e o tipo de dado específico de uma coluna.
  6. Se o comando causar um erro, a aplicação deve recuperar do driver as informações de erro e tomar as atitudes apropriadas.
  7. Fechar a conexão quando finalizar a interação com a fonte de dados.