Curso de dbExpress e DataSnap - Parte XIII

Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Para efetuar o download você precisa estar logado. Clique aqui para efetuar o login
Confirmar voto
0
 (2)  (0)

Veja neste artigo de Guinther Pauli, mais um capítulo do curso de DataSnap e dbExpress. Acesso exclusivo para Assinantes.

Curso de dbExpress e DataSnap

Parte XIII – Aplicações desconectadas

Neste exemplo, veremos como usar o dbExpress e ClientDataSet para obter dados do banco de dados, sem no entanto manter uma conexão sempre ativa com o mesmo. Isso fará com que suas aplicações se tornem mais escaláveis e apresentem uma melhor performance quando o número de clientes aumentar.

Para isso, vamos fazer o seguinte: abriremos a conexão e o cursor de dados somente o tempo mínimo necessário para executar o select. A partir daí, o DataSetProvider irá empacotar os dados em um DataPacket que será armazenado no Data do ClientDataSet. A seguir, fechamos a consulta e a conexão, e o usuário poderá continuar trabalhando normalmente (com dados em cache). Quando for necessário aplicar os dados no servidor, abrimos novamente a conexão e enviamos o Delta.

O mais interessante de tudo é que o próprio DataSetProvider já realiza a maioria desse trabalho para nós: ele sabe exatamente o momento que se faz necessária uma conexão, se encarrega de abri-la, executar a query (que também é aberta por ele) e assim por diante. Precisamos apenar configurar algumas propriedades. Vamos a prática.

Configure uma conexão dbExpress para o banco EMPLOYEE do Interbase. Coloque um SQLConnection apontando para essa conexão. Coloque também um SQLQuery, um DataSetProvider, um ClientDataSet, um DataSource, um DBGrid, dois Buttons e um Memo. Configure os componentes conforme o código a seguir:

 

  object DBGrid1: TDBGrid

    DataSource = DataSource1

  end

  object DataSource1: TDataSource

    DataSet = ClientDataSet1

  end

  object ClientDataSet1: TClientDataSet

    ProviderName = 'DataSetProvider1'

  end

  object DataSetProvider1: TDataSetProvider

    DataSet = SQLQuery1

  end

  object SQLQuery1: TSQLQuery

    SQLConnection = SQLConnection1

  end

  object SQLConnection1: TSQLConnection

    ConnectionName = 'EMPLOYEE'

    LoginPrompt = False

    Connected = False

    KeepConnection = False

    Params.Strings = (

      'DriverName=Interbase'

      'Database=C:\Borland\InterBase\examples\database\employee.gdb'

      'User_Name=sysdba'

      'Password=masterkey'

      'ServerCharSet=WIN1252'

      'SQLDialect=3')

  end

 

Seu formulário deve estar semelhante ao mostrado a seguir:

 image001.png

Figura 1.

image001.png 

Figura 2.

Observe como configurei as propriedades Connected e KeepConnection do SQLConnection, ambas para False. A SQLQuery também tem o Active configurado para False.

O código do botão Executar repassa para a SQLQuery a instrução SQL (Select) digitada no Memo:

 

procedure TFrmMain.BitBtn1Click(Sender: TObject);

begin

  SQLQuery1.SQL.Assign(Memo1.Lines);

  ClientDataSet1.Close;

  ClientDataSet1.Open;

end;

 

Execute a aplicação, digite uma instrução SQL e clique no botão Executar (veja a figura a seguir).

image003.png 

Figura 3.

Quando fazemos a consulta, os seguintes procedimentos foram realizados pelo dbExpress:

·         ClientDataSet (CDS) recebe a chamada ao Open;

·         CDS chama o método de interface As_GetRecords;

·         DataSetProvider (DSP) recebe a chamada ao GetRecords;

·         DSP abre a conexão (SQLConnection);

·         DSP abre o cursor da SQLQuery;

·         DSP varre os dados da consulta;

·         DSP empacota os dados;

·         DSP fecha o cursor (SQLQuery);

·         DSP verifica a propriedade KeepConnection, como está False, fecha a conexão com o BD;

·         DSP envia o DATA ao CDS;

·         CDS fica com dados em memória.

 

Mesmo com a aplicação em execução, podemos comprovar que não há nenhuma conexão ativa com o servidor.

image005.png 

Figura 4.

O botão Apply simplesmente chama o ApplyUpdates para atualizar o BD: o DSP se encarregará de abrir todas conexões necessárias e novamente, fechar após a operação.

Use o KeepConnection com cuidado: em um cenário onde o cliente irá frequentemente enviar solicitações (selects, updates etc.) ao BD, não é uma boa solução ter essa propriedade configurada. Ela é ideal para quando o usuário irá trabalhar de forma desconectada, em um conjunto de dados maior, por um longo período de tempo.

Outro lembrete: não use o Packet Records com essa abordagem, pois exige intensa comunicação com o servidor SQL. Pelo motivo anterior, essa combinação não faria sentido.

 

Download

Você pode fazer download de todos os exemplos deste curso a partir do endereço http://cc.borland.com/Author.aspx?ID=222668. É preciso fazer o cadastro na BDN, que é gratuito e pode ser feito a partir do endereço http://bdn.borland.com

 

dbExpress, DataSnap e ClientDataSet: Técnicas Avançadas

Para mais informações sobre acesso a dados no Delphi e técnicas avançadas, sugiro a leitura do meu livro, “Delphi: Programação para Banco de Dados e Web”, como apoio para o aprendizado das tecnologias. Na obra mostro várias técnicas introdutórios e avançadas de desenvolvimento com ClientDataSet, dbExpress e DataSnap (multicamadas, incluindo SOAP e COM+). Para mais informações, consulte o link http://www.clubedelphi.net/guinther

 

 

 

Leia todos artigos da série

 
Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Receba nossas novidades
Ficou com alguma dúvida?