Curso de dbExpress e DataSnap

Parte XXX – .NET Remoting com banco de dados

A última parte deste curso mostrará como criar aplicações multicamadas no Delphi 2005 / 2006 que farão acesso a banco de dados.

Arquitetura de aplicações distribuídas com BDP e .NET Remoting

A Figura a seguir mostra a arquitetura de uma solução usando as tecnologias do exemplo. Nela, podemos identificar as seguinte camadas:

·         Banco de Dados – armazena os dados da aplicação, podendo ser qualquer SGDB compatível com ADO.NET ou BDP (Oracle, DB2, InterBase, Firebird, MySQL etc.);

·         Servidor de Aplicação – camada onde residem as regras de acesso, incluindo DataAdapters para consultas e atualizações, além de métodos específicos para processamento de regras de negócio;

·         Cliente – faz acesso ao servidor de aplicação usando .NET Remoting. O acesso pode ser feito via HTTP ou TCP. O tipo do cliente pode ser Windows Forms ou Web Forms. No caso de ser ASP.NET Web Forms, teremos uma quarta camada na arquitetura, o browser.

 

image001.png 

Figura. Arquitetura de uma aplicação multicamadas

A Figura a seguir mostra onde cada um dos novos componentes do BDP deve ser utilizado.

 

image003.png 

 

Figura. Componentes BDP para criação de aplicações multicamadas

Criando o servidor

Crie uma aplicação do tipo Windows Forms. A partir do Data Explorer, arraste a conexão Employee, para criar um BdpConnection previamente configurado. Arraste também a tabela Employee para criar um BdpDataAdapter.

Colocamos um DataSync  e na sua propriedade Providers adicione um item, conforme mostrado na Figura a seguir.

 

image007.png 

Figura. Adicionando os DataAdapters na propriedade Providers do DataSync

Coloque um RemoteServer, configure seu ChannelType (Tcp ou Http), a porta, o DataSync (apontando para o DataSync1) e AutoStart para True.

A partir daí, os DataAdapters podem ser “enxergados” por uma aplicação remota. Fazendo uma analogia com o DataSnap, o DataSync nesse caso funciona como um DataSetProvider, que provê acesso remoto aos DataAdapters (que são semelhantes às Queries da VCL). A Figura a seguir mostra o formulário do servidor.

 

image011.png 

Figura. Servidor de aplicação

Clique em Run>Run Without Debugging e mantenha o servidor em execução.

Criando um cliente Windows Forms

Inicie uma aplicação do tipo Windows Forms e coloque no formulário principal um RemoteConnection para conectar ao servidor anterior. Configure as propriedades ChannelType, Port, ProviderType de acordo com os valores configurados no servidor. Em URI RemoteServer1. Veja a Figura.

 

image015.png 

Figura. Configuração do RemoteConnection

 

Coloque no formulário um DataSet. Para “enxergar” os DataAdapters do servidor referenciados pelo DataSync, coloque um DataHub e configure seu DataPort para RemoteConnection1 e aponte sua propriedade DataSet para DataSet1. Ative o componente. Observe que o DataSet será preenchido nesse momento com as tabelas do servidor (propriedade Tables).

Coloque um DataGrid e configure seu DataSource e DataMember. Coloque um Button e no seu evento Click digite:

 

procedure TWinForm1.Button1_Click(sender: System.Object; e: System.EventArgs);

begin

  DataHub1.ApplyChanges;

end;

 

Veja a aplicação em execução na Figura a seguir.

 

image019.png 

Figura. Cliente Windows Forms para o servidor de aplicação

Criando um cliente ASP.NET Web Forms

Vamos agora criar uma interface Web para nossa solução multicamadas. Inicie uma nova aplicação ASP.NET Web Forms e configure a conexão ao servidor. Os componentes utilizados e as configurações que devem ser feitas são exatamente as mesmas que da aplicação Windows Forms, tanto que não repetirei aqui. Além dos componentes de conexão, você precisa de um DBWebDataSource apontando para o DataSet. Usamos um DBWebGrid e um DBWebNavigator, configurando as propriedades DBDataSource e TableName.

No evento OnAutoApplyRequests e OnApplyChangeRequests do DBWebDataSource digite:

 

 DataHub1.ApplyChanges;

 

Veja na Figura a seguir como ficou a aplicação.

 

image021.png 

Figura. Cliente Web Forms para o servidor de aplicação

Passando parâmetros para consultas remotas

É muito simples passar um parâmetro para um BdpDataAdapter que esteje parametrizado. Em nosso exemplo, altere a propriedade SelectCommand.CommandText do BdpDataAdapter para:

 

SELECT * FROM EMPLOYEE where EMP_NO = ?

 

Adicione o parâmetro na propriedade Parameters do SelectCommand, dando o ParameterName e SourceColumn para Emp_No. Em BdpType escolha Int32. Rode a aplicação.

Na aplicação cliente Windows Forms, coloque um Button e um TextBox. No evento Click do botão digite:

 

procedure TWinForm1.Button1_Click1(sender: System.Object; e: System.EventArgs);

var

  da: BdpDataAdapter;

begin

  da := DataHub1.Providers[0].DataAdapter as BdpDataAdapter;

  da.SelectCommand.Parameters[0].Value := TextBox1.Text;

  DataHub1.Refresh;

end;

 

No código anterior, obtemos uma referência para o BdpDataAdapter remoto fazendo um typecast no primeiro item da coleção Providers, já que só temos um DataAdapter no servidor. A seguir, passamos normalmente o valor para o parâmetro, como se o Adapter fosse local. O método Refresh do DataHub atualiza a consulta (Figura).

 

image023.png 

Figura. Passando parâmetros remotamente

 

Leia todos artigos da série