Jump to content
Fórum Script Brasil
  • 0

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


LucAlucard

Question

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 to comment
Share on other sites

8 answers to this question

Recommended Posts

  • 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 to comment
Share on other 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 to comment
Share on other sites

  • 0

Eu já conhecia esse link .-.

Ele também não funcionou.. Tava até usando order by pela tabela (ficava abrindo e fechando td hora.. agr n faço mais isso, uso esse script xD)

Mas também não funcionou pra campos virtuais com campos reias junto .-.

Link to comment
Share on other 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 to comment
Share on other 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 to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...