Esse artigo faz parte da revista Clube Delphi edição 32. Clique aqui para ler todos os artigos desta edição



Atenção: por essa edição ser muito antiga não há arquivo PDF para download. Os artigos dessa edição estão disponíveis somente através do formato HTML.

dbExpress: Arquitetura Interna

Ganhe conhecimento e performance no acesso a dados

cross-platform

 

O dbExpress já conquistou a maioria dos programadores – ao que parece, a Borland acertou quando o idealizou. Com algumas limitações, programaticamente remediáveis, tem se mostrado uma camada rápida, estável e de distribuição muito simples.

Neste artigo entraremos na caixa preta do dbExpress. Estudando sua arquitetura interna, veremos como obter mais performance, e como usar essa tecnologia diretamente, sem os componentes de acesso da paleta dbExpress. Conheceremos também o que acontece por trás do uso dos componentes e drivers dbExpress, analisando sua implementação, e aprenderemos como tirar proveito desse conhecimento.

 

Arquitetura

O dbExpress, muito inteligentemente, teve toda a sua implementação baseada em interfaces, conseguindo assim ter um conjunto de componentes independentes da implementação dos drivers de acesso. Qualquer driver escrito segundo os padrões definidos pelo dbExpress, ou seja, implementando as interfaces com seus métodos obrigatórios, poderá ser usado com os componentes de acesso a dados para esta tecnologia.

Como podemos perceber analisando o esquema da Figura 1, os componentes da paleta dbExpress independem do driver que estão usando, pois acessam uma camada intermediária padrão.

 

Figura 1. Arquitetura dbExpress

 

Neste artigo, vamos ver como pular a primeira parte dessa estrutura, trabalhando diretamente com as interfaces dbExpress. Veja a seguir uma descrição das principais interfaces da arquitetura.

 

ISQLDriver

A interface ISQLDriver é responsável pela inicialização das estruturas específicas de cada banco de dados. Através dela podemos obter uma referência para ISQLConnection. Todo o trabalho com as interfaces começa aqui. É esta interface a responsável pela abertura da biblioteca nativa do banco de dados (vendor lib). Vejamos uma pequena descrição de seus métodos:

 

· getSQLConnection(out pConn: ISQLConnection): SQLResult

Esse método coloca em pConn uma referência para uma interface ISQLConnection. Quando a solicitação é atendida com sucesso, a função retorna SQL_SUCCESS; caso contrário é retornado um   código de erro específico para o problema.

 

· setOption(eDOption: TSQLDriverOption; PropValue: LongInt): SQLResult

Configura a propriedade do driver informada nos parâmetros.

 

· getOption(eDOption: TSQLDriverOption; plValue: Pointer;

  iMaxLength: SmallInt; out Length SmallInt): SQLResult;

Lê a propriedade do driver informada nos parâmetros.

 

ISQLConnection

ISQLConnection é a interface responsável por estabelecer a conexão com o banco de dados bem como todo o gerenciamento de transações (quando o driver/SGBD tiver suporte). Através dela, podemos obter referências às interfaces ISQLCommand e ISQLMetaData. Veja seus principais métodos:

 

· connect(pszServerName: PChar; pszUserName: PChar;

  pszPassword: PChar): SQLResult;

Solicita a conexão com o banco de dados, baseando-se nos parâmetros passados. Novamente, se a solicitação for atendida corretamente a função retornará SQL_SUCCESS.

...

Quer ler esse conteúdo completo? Tenha acesso completo