Desenvolvimento - Delphi
Delphi: Acessando Dados no DataModule em Aplicações Intraweb
O acesso aos componentes não visuais que poderão encontrar-se num datamodule é muito simples para o uso em aplicações normais no delphi. Em se tratando de intraweb a coisa muda um pouco, mas nada tão complicado...
por José Roberto F. de Araújo Jr.O acesso aos componentes não visuais que poderão encontrar-se num datamodule é muito simples para o uso em aplicações normais no delphi. Em se tratando de intraweb a coisa muda um pouco, mas nada tão complicado, apenas para melhorar a gerencia dos objetos que se encontrão no DataModule, porque? Porque há classe Chamada chamado TIWUserSession(essa Classe foi implementada a partir das versões 6.0.xx) ou TUserSession(implementada nas primeiras versões até a versão 5.0.43). Será nesta classe que instanciaremos nosso DataModule, fazendo com que, um novo usuário ao entrar no site, uma nova instancia do DataModule possa ser criada, isolando as variáveis de sessão impedindo que um usuário interfira nas variáveis de sessão do outro.
Uma modificação terá que ser feita no DataModule, ele não mais conterá sua variável de instancia, como tem em DataModule de aplicações normais, essa variável de instancia será substituída por uma função que retornará uma nova instancia de um DataModule, essa instancia será gerada pela classe TIWUserSession; mostraremos como poderão ser feitas essas modificações, no desenvolvimento de uma rápida aplicação de navegação em uma tabela modelo que vem junto à instalação do delphi chamada employee.gdb
Vamos criar nossa aplicação? Vá ao item de menu File | New | Other e na aba Intraweb dê 2 cliques no ícone Intraweb Application Wizard, depois disso será exiba uma janela de configuração para qual tipo de aplicação que iremos desenvolver, escolha o tipo de aplicação chamada StandAlone Application - isso irá criar uma aplicação executável que se utilizará de um Servidor Web interno simulando um IIS, PWS, Apache ou qualquer outro tipo de Servidor Web, fazendo com que nossa aplicação possa rodar no Browser. Veja as figuras a seguir.
Figura 1. Intraweb
Applicatin Wizard selecionado para crier Datamodule.
Figura 2. DataModule criado para
uso em aplicações Intraweb, não há nada de novo nele.
Primeiro temos que fazer algumas mudanças no nosso DataModule. Vá até a seção var do seu DataModule e retire a variável de instância, como a instância do seu DataModule será gerenciada pela Classe TIWUserSession não precisaremos mais dessa variável, mesmo porque o sistema de isolamento das instancias será feito pela classe que gerencia as sessões gerando um DataModule para cada nova sessão. Teremos que implementar uma função dentro da unit do DataModule que retorne a mesma classe do seu DataModule, como segue no trecho de código, o código completo encontra-se no projeto de exemplo que acompanha o artigo:
function DataModule1: TDMMain;
begin
Result :=
TIWUserSession(WebApplication.Data).DMMain;
end;
feito isso temos que agora adicionar as unit que contem a classe TIWUserSession e a unit IWInit na clausula uses da unit do DataModule. Siga agora para a unit que contem a classe TIWUserSession para implementarmos a instância do DataModule. Na seção Public da classe declare um campo interno do mesmo tipo do seu DataModule, no nosso exemplo nosso DataModule tem o nome de DMMain e declare um método contrutor para criar o DataModule dentro das seções, o escopo da classe ficaria como a seguinte declaração:
TIWUserSession =
class(TIWUserSessionBase)
private { Private declarations }
public {
Public declarations }
DMMain:
TDMMain;
constructor Create(AOwner: TComponent);
override;
end;
logo após ter feito isso temos que implementar o construtor da classe, a implementação é a seguinte:
constructor
TIWUserSession.Create(AOwner: TComponent);
begin
inherited;
DMMain :=
TDMMain.Create(AOwner);
end;
Pronto feito isso já podemos utilizar nosso DataModule dentro de nossa Aplicação, como se estivéssemos usando um DataModule num de nossos projeto Cliente / Servidor.
Seguindo para nosso
DataModule, insira os seguintes componentes e modifique as suas respectivas
propriedades:
- TSQLConnection
-
ConnectionName: IBConnection
- Database: insira aqui o
caminho da Database de exemplo employee.gdb que encontra-se no Diretório Borland
Shared\Data.
- User_Name: SYSDBA
-
Password: masterkey
- Name: SQLConnection
- SQLConnection: recebe o SQLConnection configurado a cima.
- CommandText: select * from CUSTOMER
- Name: SQLDataSet
-
TDataSetProvider
- DataSet: indique o SQLDataSet
configurado a cima.
- Name: dspCustomer -
TClientDataSet
- ProviderName: indique o
dspCustomer
- Name: cdsCustomer. -
TDataSource
- DataSet:
cdsCustomer
- Name: dsCustomerfeito isso podemos ativar os
componentes e seguir para o Form Intraweb. Estando no formulário aperte ALT+F11
e adicione a unit do DataModule no nesse Form; insira os seguintes componentes
configurando suas respectivas propriedades: - TIWDBGrid
- Caption:
Listagem de Cliente.
- Options: seta para True a propriedade dgIndicator
-
DataSource: indique o DataSource que se encontra no DataModule. -
TIWDBNavigator
- DataSource: indique o DataSource que
se encontra no DataModule.
Insira 4 componentes TIWDBEdit e configure eles com os seguintes campos, ou os campos que preferir: CUST_NO, CONTACT_FIRST, STATE_PROVINCE, PHONE_NO. Pronto feito isso seu formulário deve estar como o da Figura 3.
Figura 3. formulário com os componentes DataWare no
Intraweb.
Rode a aplicação pressionando F9, feito isso será exibida uma aplicação como a Figura 5, tecle F9 dentro dela novamente para que ela abra o Browser e mostre o seu form Intraweb acessando Banco de Dados Interbase.
Figura 4. foto do WebServer que simula um WebServer para
aplicações ISAPI.
Figura
5. Aplicação rodando no Browser.
Conclusão
Mostramos que podemos ter um acesso a um DataModule em aplicações
Intraweb, acessando componentes de acesso a banco de dados normalmente como em
aplicações cliente / servidor. Mostramos também que há uma classe que gerencia o
isolamente de informações das sessões chamada TIWUserSession.
Espero que tenham gostado ... e até a próxima ;)
José Roberto F. de
Araújo Jr.
Programador e Analista de Sistemas
Autor de Vários na www.activedelphi.com.br
Pode ser
contactado em: jroberto.jr@terra.com.br