Curso de dbExpress e DataSnap - Parte XVII
Veja neste artigo de Guinther Pauli, mais um capítulo do curso de dbExpress e DataSnap. Acesso exclusivo para Assinantes.
Curso de dbExpress e DataSnap
Parte XVII – Record Count e RecNo
Neste artigo veremos como usar as propriedades RecordCount e RecNo do ClienDataSet. Essas propriedades são exclusivas desse componente, sendo que possuíam capacidades limitadas quando se trabalhava com BDE. RecordCount, por exemplo, sempre retornava -1 em Queries de consultas a banco de dados quando se usa o BDE. Essa limitação não existe no ClientDataSet, pois o mesmo possui todas as informações em memória.
· RecordCount – retorne o número atual de registros na memória do ClientDataSet, ou seja, o número de registros retornados pelo Select associado (a menos que se use Packet Records).
· RecNo – a posição atual do cursor local de dados na memória do ClientDataSet. Por exemplo, se esse valor for “
Vejamos como isso funciona na prática. Coloque os componentes no formulário conforme mostrado na figura a seguir. Aqui colocamos um ClientDataSet, um DataSource, um DBGrid, um Button e um Label. 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.
No botão simplesmente jogamos o valor de RecordCount no Caption do Label.
procedure TFrmMain.BitBtn1Click(Sender: TObject);
begin
Label1.Caption := IntToStr(ClientDataSet1.RecordCount);
end;
Também criamos um campo calculado no ClientDataSet, como mostrado a seguir. Ele é do tipo Integer e vai indicar a posição atual do registro no resulset, se comportando como se fosse um campo normal do BD (como código, ID etc.)
No OnCalcFields atribuímos o valor do campo com base no valor do RecNo atual do ClientDataSet:
procedure TFrmMain.ClientDataSet1CalcFields(DataSet: TDataSet);
begin
ClientDataSet1RECNO.AsInteger :=
ClientDataSet1.RecNo;
end;
Você também pode fazer um DBGrid “zebrado” usado o RecNo, bastando verificar se o índice do registro é ímpar o par. Isso não é possível no BDE, pois sempre retorna -1. Isso pode ser feito com o seguinte código no evento OnDrawColumnCell do DBGrid:
procedure TFrmMain.DBGrid1DrawColumnCell(Sender: TObject;
const Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
begin
(*DBGrid zebrado*)
if not odd(ClientDataSet1.RecNo) then // se for ímpar
if not (gdSelected in State) then // se a célula não está selecionada
begin
DBGrid1.Canvas.Brush.Color:= clYellow; // define uma cor de fundo
DBGrid1.Canvas.FillRect(Rect); // pinta a célula
DBGrid1.DefaultDrawDataCell(rect,Column.Field,State); // pinta o texto padrão
end;
end;
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