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+).
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
- Curso de dbExpress e DataSnap - Parte XXX
Artigos relacionados
-
Artigo
-
Artigo
-
Artigo
-
Artigo
-
Artigo