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 oendereco
// 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.