22 de julho de 2009

Modelo de objetos para acesso de dados com ADO

Já faz algum tempo que os IDEs - Ambientes Integrados de Desenvolvimento - vêm facilitando a vida de quem cria programas com acesso a banco de dados. Ambientes como o Delphi e o Visual Studio permitem que se conecte a um banco e se crie telas para extrair ou dar manutenção em dados de forma rápida e intuitiva, bastando alguns cliques do mouse.

Essa abordagem permite criar aplicações rapidamente mas tem alguns problemas. Primeiro, a ferramenta acaba fazendo tudo pra você e o conhecimento para usar a tecnologia acaba se restringindo aos cliques do mouse. Depois, com a aplicação montada apenas visualmente, pode ser bastante trabalhoso caso seja necessário trocar a tecnologia de acesso ao banco. Na ABC71, por exemplo, trocamos o uso do BDE pelo ADO e a troca foi muito mais transparente porque usamos classes para persistência dos dados ao invés dos recursos visuais.

Então, se quisermos montar classes para persistência de dados usando ADO, teremos que ir um pouco mais fundo para desvendar a tecnologia. Esse conhecimento poderá então ser usado em outras situações, como em automatização do acesso a banco de dados através de scripts.

Trabalhar diretamente com a API do ADO é relativamente fácil pois há poucas classes, apenas duas para executar o básico:
Connection: Use essa classe para estabelecer conexão com um banco de dados. Antes de se conectar, é possível configurar:
a) Tempos de espera (timeout) para a conexão e para a execução de comandos;
b) O nível de isolamento das transações (isto é, se a conexão conseguirá ou não enxergar dados que ainda não sofreram Commit);
c) O local padrão para os cursores (se no próprio banco de dados ou se serão tratados no Client)
d) Parâmetros dependente do fabricante do banco de dados.

Para estabelecer uma conexão, use o método Open informando uma string de conexão. Essa "string" é um texto com parâmetros para determinar qual é o tipo do banco de dados, o endereço do servidor, quem é o usuário e sua senha, etc. Os parâmetros aceitos dependem do banco com o qual se quer conectar; no endereço http://www.connectionstrings.com há exemplos dessa string para uma ampla gama de banco de dados.

A classe Connection permite ainda controlar transações no banco de dados, através dos comandos BeginTrans, CommitTrans e RollbackTrans.

O método Execute permite submeter comandos diretamente no banco de dados, tais como UPDATE, INSERT e DELETE. No caso de comandos SELECT, um objeto do tipo RecordSet é retornado.

RecordSet: É uma coleção de registros obtidos no banco de dados. Ela permite navegar pelos registros (comando MoveNext, MoveFirst, MoveLast e MovePrevious) e trabalhar com as informações contidas neles. É importante observar que apenas um registro está posicionado por vez e que, dependendo do modo de edição em que este registro se encontra, você pode submeter alterações nos dados através do próprio Recordset. Use o método AddNew dessa classe para preparar a criação de um novo registro, Delete para removê-lo e Update para efetivar alterações (incluindo a inserção de novos registros).

Obs: quando obtido através do Execute, um RecordSet navega apenas adiante na coleção (não é permitido voltar) e os registros são read-only (não é possível alterar os dados).


Outras classes complementares ampliam as possibilidades do ADO. Por exemplo, para se obter uma coleção de registros que possam ser alterados (modo de edição "gravável'), use a classe Command, ajustando a propriedade ActiveConnection para que ela use uma conexão (Connection) que já esteja estabelecida. Um Command é mais flexível que o Execute da conexão pois pode trabalhar com queries parametrizadas e queries preparadas (para melhorar a performance), pode estabelecer que os registros retornados serão editáveis e a navegação entre os registros pode ir para frente e para trás (desde que o provedor para o banco de dados em questão tenha implementado esse recurso).

Ainda, o Recordset dá acesso a objetos do tipo Field, que representa cada um dos campos existentes no Recordset, fornecendo informações como o nome do campo, seu tipo de dado e o tamanho desse dado.

Pretendo incluir novos posts sobre esse assunto, mostrando exemplos de uso para vários dos recursos do ADO.

Nenhum comentário :

Postar um comentário

OBS: Os comentários enviados a este Blog são submetidos a moderação. Por isso, eles serão publicados somente após aprovação.

Observação: somente um membro deste blog pode postar um comentário.