Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Ordenar Campo virtual/Lookup pela coluna do DBGrid


LucAlucard

Pergunta

Seguinte... Tenho uma DBGrid com os campos... sempre q eu clico na coluna eu pego o field e faço um order by pra ele ordenar os campos e exibi-los na grid. Porém em algumas grids eu usei campos virtuais pra poder fazer o link de uma tabela com outra fazendo o Loockup. Mas como esse campo é virtual não consigo ordena-lo... alguém tem idéia de como fazer a ordenação "na unha"? sem precisar fazer um Inner Join ou algo assim?

Link para o comentário
Compartilhar em outros sites

8 respostass a esta questão

Posts Recomendados

  • 0
usei campos virtuais pra poder fazer o link de uma tabela com outra fazendo o Loockup.

o proprio lookup ordena o campo ... e se fizer um Inner Join entre tabelas use campos comuns entre as tabelas para fazer a referencia, adicionando os campos que precisar ...a ordenação podera ser feita clicando no titulo do campo

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Sim o Lookup ordena os campos realmente, porém quando colocamos esse campo em uma DBGrid ( que é p caso ) ele segue a ordem normal... e usando a proriedade SortOrder da DBGrid ele não ordena... Da erro dizendo que não encontrou o campo específico. Com inner join realmente isso funcionaria mas teria que alterar o sistema todo... não existe uma forma de ordenar somente c/ alguma rotina ou algo assim?

Brigadão Jhonas abraço!

Link para o comentário
Compartilhar em outros sites

  • 0
porém quando colocamos esse campo em uma DBGrid ( que é p caso ) ele segue a ordem normal... e usando a proriedade SortOrder da DBGrid ele não ordena... Da erro dizendo que não encontrou o campo específico.

LucAlucard, o campo virtual (ou calculado como estou mais habituado a tratar) não deve ser utilizado para colunas de ordenação. Qualquer ordenação que você tente fazer sobre os dados do DBGrid tem que existir na tabela/consulta SQL - ainda que você não faça a ordenação explicitamente, o driver do banco irá providênciá-la por voce quando você acrescenta aquele ASC ou DESC. Logo, o campo tem que existir na tabela em questão.

e se fizer um Inner Join entre tabelas use campos comuns entre as tabelas para fazer a referencia, adicionando os campos que precisar ...a ordenação podera ser feita clicando no titulo do campo
Com inner join realmente isso funcionaria mas teria que alterar o sistema todo... não existe uma forma de ordenar somente c/ alguma rotina ou algo assim?

Apenas reafirmo o que o colega Jhonas lhe disse e que voce já confirmou.

Se voce utiliza o DBGrid para edição, pode até ficar um pouco complicado de gerenciar, mas se este tipo de coluna não é editado no DBGrid, procure montar sua consulta SQL fazendo o lookup diretamente nela (usando o JOIN).

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

Bom dia amigos!

O erro ocorre porque o campo não existe no SELECT, isso já sabemos.

Resolvi esse problema fazendo o campo "existir", porém utilizando um JOIN para trazer os dados alguns componentes não respeitam a configuração do campo e tentar gravar na tabela auxiliar, causando um outro erro que claro não queremos.

Então o que fiz foi trazer os dados usando um sub SELECT, exemplo:

SELECT
 FE.FornEmpresa_fornecedor,
 FE.FornEmpresa_empresa,
 (SELECT Emp_ds from Empresa  EM WHERE EM.Emp_cd = FE.FornEmpresa_empresa) as [Emp_ds]
FROM Forn_Empresa FE

Dessa forma o componente ADOQUERY não tentar gravar dados em "Emp_ds", traz os dados e é possível ordenação porque agora ele existe no SELECT.

No FIELD, ele continua sendo do tipo LOOKUP e todo configurado para trazer os dados da outra tabela, normalmente, senão ao inserir registro ele não preenche a descrição sem reabrir o ADOQUERY.

Importante: No FIELD, na propriedade "ProviderFlags", marque apenas a opção "pfHidden", o deixei como ReadOnly para que não seja possível altera-lo e assim evitar que tente ser gravado.

Testem aí e me dêem feedback por favor.

Abraços!!

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...