Olá pessoal gostaria de mostrar nesse artigo uma visão geral e como funcionam os componentes visuais e não visuais de acesso a dados. Vamos mostrar os exemplos usando os famosos componentes DBWare(DBEdit, DBComobobox, DBGrid, DBText, etc...), além de usar o DBExpress para ilustrar os exemplos, mas os conceitos são aplicados as outras tecnologias de acesso a dados, como BDE, ADO, etc. A ideia é mostrar como funciona todo o processo da ligação de cada componente um no outro.

Vamos ilustrar com base no formulário abaixo:

Formulário de exemplo
Figura 1: Formulário de exemplo.

Como podemos notar na figura acima temos duas divisões no nosso formulário: Componentes não visuais e Componentes visuais.

O que é um componente?

Componente é utilizado na famosa indústria de software como referencia para reutilização de um Objeto que por sua vez expõe uma ou mais interfaces para clientes de maneira padronizada.

O que são componentes visuais?

Componentes visuais são componentes que podemos visualizar em tempo de execução. Por exemplo, DBEdit, DBComobobox, DBGrid, DBText, Button, Edit, StringGrid, Label, etc. Estes são visíveis em tempo de execução e designer.

O que são componentes não visuais?

Componentes não visuais são componentes que não podemos visualizar em tempo de execução. Por exemplo, ClientDataSet, SQLDataSet, XMLTransform, DataSource, etc. Estes são visíveis apenas em tempo de designer. Caso você compile o projeto, os componentes da seção amarela(SQLConnection, SQLDaSet, DataSetProvider, ClientDataSet e DataSource), não vão aparecer de maneira alguma, os demais sim.

Agora que sabemos o que são componentes, visuais ou não, podemos iniciar os estudos de cada um deles, vou falar de forma rápida e resumida, não vou me alongar muito na explicação de cada um deles:

DBExpress


SQLConnection: Responsável pela comunicação da aplicação com o Banco de Dados

SQLDataSet, SQLQuery, SQLTable: Responsável por fazer e trazer as requisições no SQLConnection, nele que incluímos os comandos de, Select, Insert, Delete e Update.

DataAccess: Deste ponto em diante se aplica a qualquer componente de acesso a dados, ou seja, TTable, TQuery, AdoTable, AdoQuery etc.

DataSetProvider: Este componente funciona como um tradutor, ou seja, ele interpreta os comandos solicitados pelo ClientDataSet e faz uma tradução para o SQLTable, SQLQuery, TTable, TQuery, etc, a mesma forma que ele traduz os dados trazidos do banco de dados para o ClientDaset.

ClientDataSet: Nele podemos fazer cache de dados trazidos do nosso banco de dados, alterar, incluir, excluir e navegar nas informações em memória, isso mesmo, em memoria, pois depois que o mesmo carrega as informações, você pode continuar trabalhando sem a necessidade de conexão direta com o banco de dados, ou seja, os dados estão em memoria armazenados no ClientDataSet, como fazemos para ver estes dados?

DataSource: Responsável por fazer uma coisa muito importante, pegar os dados em memoria do nosso ClientDataSet e fazer o vinculo com os componentes DBWare, como ?

Componentes DBWare

DBGrid, DBEdit, DBText, etc: Este componentes servem apenas como um espelho, para refletir o que esta armazenado em memoria, sendo assim os dados não estão armazenados na sua caixa de texto, no seu DBGrid, mas sim no ClientDataSet, experimente fechar este ClientDataSet e veja o que acontece com o conteúdo nos seus componentes DBWare, todos estes vão ficar “vazios”, por funcionarem como um espelho.

Agora que vimos os componentes visuais e não visuais, como podemos fazer pra ligar estes componentes?

Ligação dos componentes não visuais

Figura 2: Ligação dos componentes não visuais.

Retângulo Preto: Ligamos os componentes da nossa palheta de acesso a dados escolhida, neste caso a DBExpress, sendo assim através da propriedade SQLConnection(Selecionando o SDS), você pode apontar para o nosso SQLConnection. Atenção pois não estou fazendo conexão com nenhum banco de dados ou tabela, apenas ilustrando como funciona o processo como um todo.

Retângulo Vermelho: Ligamos os componentes da palheta de acesso a dados escolhida com a aplicação, selecionando o DSP você encontrará uma propriedade chama DataSet, aponte a mesma para o seu DataSet desejado no nosso caso SDS, cuidado pois como é DataSet, o ClientDataSet também aparece, muito cuidado na hora de selecionar.

Retângulo Azul: Neste ponto já não importa qual é o seu componente de acesso a dados (DBExpress, ADO, BDE, etc), pois daqui pra frente ele se torna independente destes componentes, para fazer a ligação devemos selecionar o nosso CDS e na propriedade DataSetProvider, selecionar o DSP.

Retângulo Marrom: Agora que temos os dados em memoria, podemos fazer com que estes sejam visualizados em um formulário, por exemplo. Selecionando o seu DataSource localize a propriedade DataSet, mas tome cuidado pois como é um DataSet, o CDS e o SDS vão ser listados, marque o CDS.

Até agora já temos os componentes não visuais configurados e devidamente ligados. Vamos neste ponto fazer a ultima ligação dos nosso exemplo, veja a imagem abaixo:

Ligando o DataSource aos componentes visuais

Figura 3: Ligando o DataSource aos componentes visuais.

Como podemos notar neste ponto vamos ligar os dados em memoria com os componentes visuais (ou seja, os componentes não visuais, até chegar o DataSource, não sabem onde será exibido à informação e nem interessa pra eles saberem onde vão mostrar estes dados) através do DataSource. Para fazer esta ligação basta você selecionar qualquer componente DBWare e localizar 2 propriedades, DataSource e DataField. DataSource deve ser selecionada sempre primeiro, pois e nela que vamos encontrar os campos listados no CDS, já o DataField é onde selecionamos os campos do nosso CDS.

Note que podemos associar qualquer componente DBWare a qualquer Field(Campo) do nosso ClientDataSet.

Agora dar uma explicação rápida sobre FiedByName que temos no ClientDataSet.

FieldByName = Esta propriedade contem o campo que desejamos ler ou escrever algum conteúdo, veja por exemplo:

Listagem 1: Exemplo do FieldByName


CDS.FieldByName(‘Nome’).AsString := ‘WESLEY YAMAZACK’; {Estamos atribuindo o valor}
ShowMessage(CDS.FieldByName(‘Nome’).AsString); {Estamos lendo o valor informado}

Funciona da mesma forma que se digitarmos num DBEdit, ligado na propriedade FieldName, ou seja, é apenas mais uma forma de trabalharmos com o conteúdo do ClientDataSet.

Uma outra dica que passo é que não tente alterar o valor da Célula em um DBGrid, mas sim mude o valor do FieldByName, por exemplo, no ClientDataSet, lembra que DBGrid é apenas um espelho.

Como vimos neste artigo, as propriedades e configurações dos componentes do Delphi não são tão complexas, basta saber onde configurar cada uma destas.

Fico por aqui um abraço a todos e até o próximo artigo