ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

ordem crescente no dbgrid

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
wellington_careca
Novato
Novato


Registrado: Domingo, 26 de Dezembro de 2010
Mensagens: 64

MensagemEnviada: Sáb Jul 30, 2011 7:02 pm    Assunto: ordem crescente no dbgrid Responder com Citação

Boa noite

qual o comando que eu possa usar para colocar os registros do dbgrid em ordem crescente??

OBS; quero colocar em ordem apenas os registros que estão no dbgrid.

exemplo

Faço uma pesquisa e retorna esta pesquisa no dbgrid, depois dos registro desta pesquisa estiver no dbgrid ele coloca em ordem.

tem como fazer isto???

Colocar em ordem em toda a tabela e facil ( order by ) mas depois de uma pesquisa não estou conseguindo.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
20071780437
Membro Junior
Membro Junior


Registrado: Segunda-Feira, 8 de Março de 2010
Mensagens: 310

MensagemEnviada: Dom Jul 31, 2011 12:32 pm    Assunto: Re: ordem crescente no dbgrid Responder com Citação

wellington_careca escreveu:
Boa noite

qual o comando que eu possa usar para colocar os registros do dbgrid em ordem crescente??

OBS; quero colocar em ordem apenas os registros que estão no dbgrid.

exemplo

Faço uma pesquisa e retorna esta pesquisa no dbgrid, depois dos registro desta pesquisa estiver no dbgrid ele coloca em ordem.

tem como fazer isto???

Colocar em ordem em toda a tabela e facil ( order by ) mas depois de uma pesquisa não estou conseguindo.


Não entendi muito bem a sua dúvida, mas se você já sabe como ordenar um DBGrid, então basta você criar um método que faça isso e chamar esse método toda vez que uma pesquisa for realizada.
_________________
Thiago Pereira Nobre
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
wellington_careca
Novato
Novato


Registrado: Domingo, 26 de Dezembro de 2010
Mensagens: 64

MensagemEnviada: Dom Jul 31, 2011 2:01 pm    Assunto: Responder com Citação

E isso mesmo, preciso ordernar depois da pesquisa feita, o que eu não estou dando conta e de ordenar os registros do dbgrid depois da pesquisa.

Qual seria o metodo para fazer esta ordem???
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
20071780437
Membro Junior
Membro Junior


Registrado: Segunda-Feira, 8 de Março de 2010
Mensagens: 310

MensagemEnviada: Dom Jul 31, 2011 2:15 pm    Assunto: Responder com Citação

Eu tenho um código que inclusive é da revista Clube Delphi que faz a ordenação de acordo com a coluna do DBGrid que o usuário clicar, ou seja, o DBGrid fica ordenado de acordo com a coluna clicada pelo usuário.

Dá uma olhada no código aí:

Código:

procedure TForm1.DBGrid1TitleClick(Column: TColumn);
begin
  //Recupera a cor original da coluna atualmente indexada
  if DataModule1.ADOTable1.IndexFieldNames <> '' then    DBGrid1.Columns[DataModule1.ADOTable1.FieldByName(DataModule1.ADOTable1.IndexFieldNames).Index].Title.Color := DBGrid1.FixedColor;

  //Se o campo não for blob ou memo e se for do tipo data
  if not (Column.Field.DataType in [ftBlob,ftMemo]) then
    if Column.Field.FieldKind = fkData then
    begin
      DataModule1.ADOTable1.IndexFieldNames := Column.FieldName;
      Column.Title.Color := $AAAA99;
    end;
end


Este é um exemplo de como ordenar um DBGrid de acordo com uma coluna específica.
Eu numca testei, mas talvez você possa chamar o evento OnTitleClik do DBGrid de acordo com o campo/coluna da pesquisa em questão no momento em que ela é realizada, porém não sei se teria como fazer isso pq eu numca tentei.
_________________
Thiago Pereira Nobre
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
wellington_careca
Novato
Novato


Registrado: Domingo, 26 de Dezembro de 2010
Mensagens: 64

MensagemEnviada: Dom Jul 31, 2011 2:20 pm    Assunto: Responder com Citação

Eu já testei este codigo, realmente ele ordena pela coluna que eu clicar, mas ele ordena toda a tabela e não so os registros que foi pesquisado no dbgrid.

Exemplo

PESQUISO QUANTIDADE DE REGISTROS DENTRO DE UM MES, DEPOIS ELE ORDENA POR ORDEM ALFABETICA POR NOME APENAS OS REGISTROS QUE ESTAO DENTRO DA PESQUISA.

Tem alguma ideia de como fazer isto??? exemplo colocar no botão pesquisar, ele já me retornaria a pesquisa solicitada e em ordem.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
20071780437
Membro Junior
Membro Junior


Registrado: Segunda-Feira, 8 de Março de 2010
Mensagens: 310

MensagemEnviada: Dom Jul 31, 2011 3:01 pm    Assunto: Responder com Citação

wellington_careca escreveu:
Eu já testei este codigo, realmente ele ordena pela coluna que eu clicar, mas ele ordena toda a tabela e não so os registros que foi pesquisado no dbgrid.

Exemplo

PESQUISO QUANTIDADE DE REGISTROS DENTRO DE UM MES, DEPOIS ELE ORDENA POR ORDEM ALFABETICA POR NOME APENAS OS REGISTROS QUE ESTAO DENTRO DA PESQUISA.

Tem alguma ideia de como fazer isto??? exemplo colocar no botão pesquisar, ele já me retornaria a pesquisa solicitada e em ordem.


Olha, a única outra maneira que eu conheço de fazer essa ordenação seria jogando os dados de um determinado campo, um a um, para um vetor e ordenar esse vetor. E como o Delphi aceita fazer comparação não só de números inteiros ou reais, como também de strings, esse seria um método viável.

Uma dica é que já que você vai fazer a ordenação do campo de qualquer maneira é que você faça a ordenação antes mesmo de começar a pesquisa e depois realize uma pesquisa binária.

Aqui vai um exemplo de código de pesquisa binária feito por mim:

Código:
function PesquisaBinariaVetorReais(vetor: TVetorReais; tamanho: longint; chave: real): boolean;
var
  i,n,primeiro,meio,ultimo: integer;
  aux: boolean;
begin
  OrdenaVetorReais(vetor,tamanho); {essa procedure (OrdenaVetorReais())pode utilizar vários métodos de ordenação diferente, então escolha um e utilize}
  aux := false;
  primeiro := 1;
  ultimo := tamanho;
  n := Round(ln(tamanho)/ln(2))+1;
  for i := 1 to n do
  begin
    meio := (primeiro+ultimo) DIV 2;
    if chave = vetor[meio] then
    begin
      aux := true;
      break;
    end
    else if chave > vetor[meio] then
      primeiro := meio + 1
    else
      ultimo := meio - 1;
  end;
  PesquisaBinariaVetorReais := aux;
end;


Vou citar alguns métodos de ordenação para que você possa pesquisar e decidir qual vai utilizar: Bubble Sort, Select Sort, Inserction Sort, Comb Sort (ou Gap Sort), Heap Sort, Quick Sort e etc.

Você pode escolher qualquer método de ordenação que ele vai funcionar, mas eu recomendo que você preste atenção na eficiência e não na facilidade de criar o código para realizar a ordenação.
_________________
Thiago Pereira Nobre


Editado pela última vez por 20071780437 em Dom Jul 31, 2011 3:25 pm, num total de 1 vez
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
wellington_careca
Novato
Novato


Registrado: Domingo, 26 de Dezembro de 2010
Mensagens: 64

MensagemEnviada: Dom Jul 31, 2011 3:23 pm    Assunto: Responder com Citação

desculpe minha falta de conhecimento, pois sou novato em delphi.

Este codigo que voce me passou eu posso colocar ele no botão??

ele ficaria desta mesma forma que voce me passou???
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
20071780437
Membro Junior
Membro Junior


Registrado: Segunda-Feira, 8 de Março de 2010
Mensagens: 310

MensagemEnviada: Dom Jul 31, 2011 3:33 pm    Assunto: Responder com Citação

wellington_careca escreveu:
desculpe minha falta de conhecimento, pois sou novato em delphi.

Este codigo que voce me passou eu posso colocar ele no botão??

ele ficaria desta mesma forma que voce me passou???


Não.

Esse código que eu te passei precisa primeiro que você crie antes dele o tipo TVetorReais e uma procedure capaz de realizar a ordenação de um vetor e antes de você ordenar o vetor você tem que jogar os valores do campo do BD em que você vai realizar a pesquisa para um vetor, que é o que vai ser ordenado. Somente então a function que eu coloquei no código acima vai funcionar.

Essa function é para ser utilizada somente para saber se o valor real procurado foi encontrado ou não. Por exemplo:
Código:

  If PesquisaBinariaVetorReais(vet,t,ch) then
    ShowMessage('Nº encontrado')
  else
    ShowMessage('Nº não encontrado');


Claro que você tem que fazer as devidas adaptações no código, mas se você não entendeu o código que te passei eu sugiro que pesquise mais sobre tipos de dados definidos, sub-rotinas, pesquisa binária, métodos de ordenação e também sobre vetores é claro.
_________________
Thiago Pereira Nobre
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
wellington_careca
Novato
Novato


Registrado: Domingo, 26 de Dezembro de 2010
Mensagens: 64

MensagemEnviada: Dom Jul 31, 2011 3:38 pm    Assunto: Responder com Citação

obrigado pelas dicas,

Vou tentar e pesquisar mais, qualquer coisa posto novamente ok.
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB