DevMedia - asp.net, Java, Delphi, SQL e web Design, tudo em um só lugar!
Bem vindo a DevMedia!
LOGIN:     SENHA:
 
 

Curso de dbExpress e DataSnap - Parte XVI

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

Curso de dbExpress e DataSnap

Parte XVI – Save Point

Neste artigo veremos como usar o interessante recurso de SavePoint do ClientDataSet. Esse recursos permite que você “tire um foto” do atual status da memória do ClientDataSet, e recupere este status a qualquer momento. Você pode, por exemplo, salvar as atuais alterações do CDS em memória, fazer novas alterações e a seguir desfaze-las, voltando ao estado original previamente sinalizado. Imagine isso como uma espécie de transações em memória, com Rollback e Commit. Para ver como isso funciona na prática, preparei um exemplo interessante.

Coloque os componentes no formulário conforme mostrado na figura a seguir. Aqui colocamos um ClientDataSet, um DataSource e três Buttons. Dê um clique de direita no ClientDataSet, escolha Load from MyBase Table e abra o arquivo Customer.XML, localizado nos demos do Delphi, por padrão no diretório C:\Arquivos de programas\Arquivos comuns\Borland Shared\Data. Arraste os TFields para o form para criar os controles Data-Aware.


O código DFM do form é mostrado a seguir:

object ClientDataSet1: TClientDataSet

 Active = True

 object ClientDataSet1CustNo: TFloatField

   FieldName = 'CustNo'

 end

 object ClientDataSet1Company: TStringField

   FieldName = 'Company'

   Size = 30

 end

 object ClientDataSet1Addr1: TStringField

   FieldName = 'Addr1'

   Size = 30

 end

 object ClientDataSet1Addr2: TStringField

   FieldName = 'Addr2'

   Size = 30

 end

 object ClientDataSet1City: TStringField

   FieldName = 'City'

   Size = 15

 end

 object ClientDataSet1State: TStringField

   FieldName = 'State'

 end

 object ClientDataSet1Zip: TStringField

   FieldName = 'Zip'

   Size = 10

 end

 object ClientDataSet1Country: TStringField

   FieldName = 'Country'

 end

 object ClientDataSet1Phone: TStringField

   FieldName = 'Phone'

   Size = 15

 end

 object ClientDataSet1FAX: TStringField

   FieldName = 'FAX'

   Size = 15

 end

 object ClientDataSet1TaxRate: TFloatField

   FieldName = 'TaxRate'

 end

 object ClientDataSet1Contact: TStringField

   FieldName = 'Contact'

 end

 object ClientDataSet1LastInvoiceDate: TDateTimeField

   FieldName = 'LastInvoiceDate'

 end

end

object DataSource1: TDataSource

 DataSet = ClientDataSet1

end

object DBGrid1: TDBGrid

 DataSource = DataSource1

end

object DBNavigator1: TDBNavigator

 DataSource = DataSource1

end

O código do botão SavePoint salve o estado atual do ClientDataSet:

procedure TFrmMain.BitBtn2Click(Sender: TObject);

begin

 MyPoint := ClientDataSet1.SavePoint;

end;

MyPoint é uma variável declara no form, com o seguinte tipo:

 public

   MyPoint : integer;

Para recuperar o estado, basta atribuir novamente essa propriedade ao SavePoint, observe (fizemos isso no outro botão):

procedure TFrmMain.BitBtn3Click(Sender: TObject);

begin

 ClientDataSet1.SavePoint := MyPoint;

end;

Para voltar ao último estado, chamamos o UndoLastChanges no botão de mesmo nome:

procedure TFrmMain.BitBtn1Click(Sender: TObject);

begin

 ClientDataSet1.UndoLastChange(true);

end;

Executando a aplicação, vamos fazer alguns testes para ver como recurso funciona. Altere o Company colocando “TESTE1” ao final, clique em Post no DBNavigator e a seguir no botão SavePoint. Seguindo os mesmos passos, altere para “TESTE2” e “TESTE3”, dando sempre um post e savepoint ao final.


Agora clique várias vezes no botão UnLastChanges e verifique que o estado atual de cada savepoint é recuperado a cada chamado a método, como transações de BD, porém, tudo em memória.


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+).





    0 COMENTÁRIO

[Fechar]

Este post é fechado - você precisa ter acesso ao post para incluir um comentário.


Nenhum comentário foi postado - seja o primeiro a comentar!



Publicidade
Autor
Guinther Pauli

Guinther Pauli - guintherpauli@gmail.com - Editor Geral .NET Magazine Brasil e ClubeDelphi - Microsoft Certified: MCP, MCAD, MCSD.NET, MCTS, MCPD e certificado Delphi: 3,5,6,7,2005,2006,Delphi for Web e Delphi for Linux http://guintherpauli.blogspot.com http://twitter.com/GuintherPauli http://cc....


Space do autor
Estatísticas
Favorito:
Comentários:
Feedback:
Utilidade:
3   0
[Fechar]

Você precisa estar logado para dar um feedback.

Clique aqui para efetuar o login
[Fechar]


Este post está fechado. Saiba mais sobre a assinatura MVP!
web-03
DevMedia  |  Anuncie  |  Fale conosco
Hospedagem web por Porta 80 Web Hosting
2012 - Todos os Direitos Reservados a web-03