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.
Figura. Arquitetura de uma aplicação multicamadas
A Figura a seguir mostra onde cada um dos novos componentes do BDP deve ser utilizado.
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.
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.
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.
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.
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.
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).
Figura. Passando parâmetros remotamente
Leia todos artigos da série
- Curso de dbExpress e DataSnap
- Curso de dbExpress e DataSnap - Parte II
- Curso de dbExpress e DataSnap - Parte III
- Curso de dbExpress e DataSnap - Parte IV
- Curso de dbExpress e DataSnap - Parte V
- Curso de dbExpress e DataSnap - Parte VI
- Curso de dbExpress e DataSnap - Parte VII
- Curso de dbExpress e DataSnap - Parte VIII
- Curso de dbExpress e DataSnap - Parte IX
- Curso de dbExpress e DataSnap - Parte X
- Curso de dbExpress e DataSnap - Parte XI
- Curso de dbExpress e DataSnap - Parte XII
- Curso de dbExpress e DataSnap - Parte XIII
- Curso de dbExpress e DataSnap - Parte XIV
- Curso de dbExpress e DataSnap - Parte XV
- Curso de dbExpress e DataSnap - Parte XVI
- Curso de dbExpress e DataSnap - Parte XVII
- Curso de dbExpress e DataSnap - Parte XVIII
- Curso de dbExpress e DataSnap - Parte XIX
- Curso de dbExpress e DataSnap - Parte XX
- Curso de dbExpress e DataSnap - Parte XXI
- Curso de dbExpress e DataSnap - Parte XXII
- Curso de dbExpress e DataSnap - Parte XXIII
- Curso de dbExpress e DataSnap - Parte XXIV
- Curso de dbExpress e DataSnap - Parte XXV
- Curso de dbExpress e DataSnap - Parte XXVI
- Curso de dbExpress e DataSnap - Parte XXVII
- Curso de dbExpress e DataSnap - Parte XXVIII
- Curso de dbExpress e DataSnap - Parte XXIX