Olá amigos, estou trazendo hoje uma dica rápida para quem deseja usar o bookmark. Primeiro vamos esclarecer o que é BookMark e depois mostrar uma das mais simples maneiras de utilizar esse recurso.
O que é BookMark ?
Bookmark é um artifício que temos a nossa disposição para marcar um registro no ClientDataSet e depois localizá-lo rapidamente. Imagine o BookMark como um marcador de páginas (seria essa a tradução ao pé da letra), sendo assim você marca o registro no qual quer retornar futuramente, navega pelos outros registros do ClientDataSet e quando desejar, faz a chamada para o seu bookmark e retorna ao registro marcado. Parece fácil não é?
É fácil sim!
Para utilizar o bookmark da maneira mais simples, devemos utilizar o marcador como uma string. Crie uma variável private no seu form do tipo string. Ela será utilizada para receber o marcador do ClientDataSet, como também para indicar qual a posição o ClientDataSet deve colocar o ponteiro posteriormente.
Está parecendo complicado né, mas você verá que é brincadeira de criança fazer isso.
Construa um form conforme o modelo abaixo ou baixe aqui o exemplo completo.
Não se preocupe com os dados isso será resolvido no exemplo criando uma tabela temporária. Agora vamos a codificação para aqueles que não baixaram o exemplo vou colocar abaixo o código da unit.
unit uExemploBookMark; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Buttons, DB, DBClient, Grids, DBGrids; type TExemploBookMark = class(TForm) DBGrid1: TDBGrid; CDS: TClientDataSet; ds: TDataSource; BitBtn1: TBitBtn; MemorizaBookMark: TBitBtn; LocalizaBookMark: TBitBtn; procedure BitBtn1Click(Sender: TObject); procedure MemorizaBookMarkClick(Sender: TObject); procedure LocalizaBookMarkClick(Sender: TObject); private { Private declarations } BookMarkString : String; // essa variavel ira auxiliar no uso do bookmark public { Public declarations } end; var ExemploBookMark: TExemploBookMark; implementation {$R *.dfm} procedure TExemploBookMark.BitBtn1Click(Sender: TObject); var I: Integer; begin // aqui estamos criando nossa tabela temporaria CDS.FieldDefs.Add('codigo',ftInteger); CDS.FieldDefs.Add('descricao',ftString, 50); CDS.CreateDataSet; // aqui estamos criando os registros na tabela temporaria for I := 1 to 10 do begin CDS.Append; CDS.FieldByName('codigo').AsInteger := i; CDS.FieldByName('descricao').AsString := 'Descrição - '+inttostr(i); CDS.Post; end; end; procedure TExemploBookMark.LocalizaBookMarkClick(Sender: TObject); begin // dessa maneira dizemos ao clientdataset para ir para o
endereco // armazenado na nossa variavel CDS.Bookmark := BookMarkString; end; procedure TExemploBookMark.MemorizaBookMarkClick(Sender: TObject); begin // aqui estamos atribuindo o endereco atual do registro na nossa // variavel BookMarkString := Cds.Bookmark; end; end.
Para testar aponte o cursor para um registro qualquer selecionando o registro e depois clique no botão Memoriza BookMark, feito isso navegue pelo gride apontando agora qualquer outro registro e depois clique no botão Localiza BookMark, nesse instante o cursor deverá retornar para o registro memorizado anteriormente.
Vocês perceberam como foi fácil utilizar o bookmark dessa maneira? Para marcar nosso registro utilizamos BookMarkString := Cds.Bookmark; e para retornar ao registro marcado fizemos o contrário CDS.Bookmark := BookMarkString; .
Claro que alguns irão dizer que é melhor utilizar o bookmark criando um ponteiro, etc. Sim, realmente se criarmos um ponteiro do tipo TBookMark, poderemos utilizar funcionalidades mais complexas, proporcionando um controle maior e mais seguro, mas o objetivo aqui era justamente demonstrar a parte fácil desse recurso e sua implementação sendo feita da maneira mais simples possível, espero que tenham gostado.
0 comments
Postar um comentário