|
ActiveDelphi .: O site do programador Delphi! :.
|
Exibir mensagem anterior :: Exibir próxima mensagem |
Autor |
Mensagem |
wellington_careca Novato
Registrado: Domingo, 26 de Dezembro de 2010 Mensagens: 64
|
Enviada: Sáb Jul 30, 2011 7:02 pm Assunto: ordem crescente no dbgrid |
|
|
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 |
|
|
20071780437 Membro Junior
Registrado: Segunda-Feira, 8 de Março de 2010 Mensagens: 310
|
Enviada: Dom Jul 31, 2011 12:32 pm Assunto: Re: ordem crescente no dbgrid |
|
|
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 |
|
|
wellington_careca Novato
Registrado: Domingo, 26 de Dezembro de 2010 Mensagens: 64
|
Enviada: Dom Jul 31, 2011 2:01 pm Assunto: |
|
|
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 |
|
|
20071780437 Membro Junior
Registrado: Segunda-Feira, 8 de Março de 2010 Mensagens: 310
|
Enviada: Dom Jul 31, 2011 2:15 pm Assunto: |
|
|
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 |
|
|
wellington_careca Novato
Registrado: Domingo, 26 de Dezembro de 2010 Mensagens: 64
|
Enviada: Dom Jul 31, 2011 2:20 pm Assunto: |
|
|
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 |
|
|
20071780437 Membro Junior
Registrado: Segunda-Feira, 8 de Março de 2010 Mensagens: 310
|
Enviada: Dom Jul 31, 2011 3:01 pm Assunto: |
|
|
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 |
|
|
wellington_careca Novato
Registrado: Domingo, 26 de Dezembro de 2010 Mensagens: 64
|
Enviada: Dom Jul 31, 2011 3:23 pm Assunto: |
|
|
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 |
|
|
20071780437 Membro Junior
Registrado: Segunda-Feira, 8 de Março de 2010 Mensagens: 310
|
Enviada: Dom Jul 31, 2011 3:33 pm Assunto: |
|
|
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 |
|
|
wellington_careca Novato
Registrado: Domingo, 26 de Dezembro de 2010 Mensagens: 64
|
Enviada: Dom Jul 31, 2011 3:38 pm Assunto: |
|
|
obrigado pelas dicas,
Vou tentar e pesquisar mais, qualquer coisa posto novamente ok. |
|
Voltar ao Topo |
|
|
|
|
Enviar Mensagens Novas: Proibido. Responder Tópicos Proibido Editar Mensagens: Proibido. Excluir Mensagens: Proibido. Votar em Enquetes: Proibido.
|
|