A partir de agora iremos criar índice em tempo de projeto, iremos definir o índice em run-time, ou seja, em tempo de execução do projeto.

 

Selecione o Formulário e no evento OnCreate  coloque o seguinte código:

 

 procedure TfrmPrincipal.FormCreate(Sender: TObject);

begin

  cdsPessoa.Open;

  cdsPessoa.IndexFieldNames:='nome';

end;

 

A propriedade IndexFiledNames recebe uma string, aqui estamos passando o nome do campo que queremos ordenar, podemos também ordenar por qualquer outro campo da sua tabela, basta separá-los por ponto e vírgua (;).

Após o campo Nome, coloque o campo salario e execute a aplicação e perceba como ficou a ordenação dos campos.

 

procedure TfrmPrincipal.FormCreate(Sender: TObject);

begin

            cdsPessoa.Open;

cdsPessoa.IndexFieldNames:='Nome; Salario';

end;

 

A propriedade IndexFiledNames toma como primeira referência para montar o índice o campo nome e depois o campo salario.

Mas e se quiséssemos clicar em determinada coluna do DbGrid e ele ordenar por ela. Para isso iremos utilizar o evento OnTitleClick do DbGrid, coloque o seguinte código nesse evento:

 

procedure TfrmPrincipal.dbgPessoaTitleClick(Column: TColumn);

begin

              cdsCliente.IndexFieldNames:= Column.FieldName;

end;

 

 Para trabalharmos com índices, basta definir o nome do campo na propriedade IndexFieldNames. Como não sabemos qual a coluna que o usuário irá clicar utilizamos a propriedade Column do DbGrid e logo depois passamos o nome do campo através da propriedade FieldName do ClientDataSet. A propriedade IndexFieldNames aceita apenas o nome do campo a ser ordenado. Se você selecionar o DbGrid e clicar na reticência na propriedade column, você perceberá que lá está todos os nossos campos que estão no ClientDataSet. A propriedade FieldName representa o nome do campo que o usuário clicou.

Execute a aplicação e clique em qualquer coluna do DbGrid e perceba que após o clique ele ordena a coluna do DbGrid em ordem crescente.

 


Se você tiver mais de um índice em um dataset basta atribuí-lo de acordo com a sua necessidade.

 

 

Método GetIndexName

 

            Para sabermos informações sobre um índice que esteja em memória, temos que utilizar o método GetIndexName, que nos retorna como paramento um Tstrings, no qual armazena os nomes de índice resultantes.

            Adicione no formulário um ListBox e um Button e no trecho de código a seguir nos mostra como exibir num ListBox os nomes de todos os índices definidos para um dataset:

 

procedure TfrmPrincipal.Button1Click(Sender: TObject);

begin

  cdsPessoa.GetIndexNames(ListBox1.Items);

end;

 

 

Update

 

            Para atualizarmos um índice temos que utilizar o método Update do indexDefts, ou seja, estamos atualizando a lista de índice caso tenha alguma alteração na mesma. Como mostra o código a seguir:

 

procedure TfrmPrincipal.Button2Click(Sender: TObject);

begin

  cdsPessoa.IndexDefs.Update;

end;

 

Fico por aqui, e bons estudos.

 

Rubens Antunes

Autor do Livro: Delphi – Faça Uma Aplicação Comercial