ClubeDelphi 44 - Indexação/Coluna Grid - Problemas!!!

Delphi

31/05/2004

Prezados Companheiros...
Vejam se podem me ajudar....

Peguei da Revista CD edição 44 a matéria sobre ordenação do grid ao clicar na coluna.

A rotina funcionou beleza, até que tive que encarar o seguinte problema.

Em um grid, preciso listar uma coluna de um campo de outra tabela(estrangeira).

É um grid que está está ligado a uma query de localizações. Uso esta query para diversas localizaçoes.

Então tenho grid que listo as seguintes colunas:

Nome da Entidades(ENT_NOME) - tabela ENTIDADES_GERAL
Cidade da entidade(CIDADE) - tabela CIDADES


Acontece que na tabela de ENTIDADES_GERAL tenho gravado o codigo da cidade(chave estrangeira), sendo que para trazer a CIDADE da tabela cidades eu tenho que fazer isso via sql.

Vejam:

Select E.CODIGO, E.COD_CIDADE, E.NOME, C.CIDADE from ENTIDADES_GERAL E, CIDADES C where upper(E.NOME)
like :Descricao AND E.COD_CIDADE = C.CODIGO Order By E.NOME;

Eu deixo ordenado por NOME pois é aordenação padrão, quando o usuario abre o grid pela primeira vez a coluna NOME ordena automatico

O problema é que, como não existe o campo CIDADE na tabela de entidades(tenho somente o codigo das cidades), quando clico na coluna CIDADE do grid, dá um erro dizendo que o campo CIDADE não existe. De fato não existe na tabela de Entidades, pois mantenho somente o codigo das cidades. O nome das cidades está na outra tabela que está relacionada e que estou trazendo via sql.

VEJAM A ROTINA QUE ADAPTEI ao meu codigo usando o modelo da revista Clube dephi, vale lembrar que o codigo funciona perfeitamente, até o momento que não trago campos de outras tabelas(relacionadas) para lsitar no grid.



procedure TF_LocalizaSubCads.dbgTiposEnder_SubTitleClick(Column: TColumn);
begin

***** O problema acontece aqui... No If abaixo:

//Recupera a cor original da coluna atualmente indexada
If dtmDados.CdsLocalizacao.IndexFieldNames <> ´´ Then
GridAtual.Columns[dtmDados.CdsLocalizacao.FieldByName(dtmDados.CdsLocalizacao.IndexFieldNames).Index].Title.Color := GridAtual.FixedColor;

***** Fim do trecho que dá o pau.....

//Obs: Se eu isolar o if acima, não acontece o erro, mas também não ordena, nem volta a cor da coluna que estava colorida. Conforme o usuario vai clicando a coluna deve ficar colorida. Então as colunas ficam todas da mesma cor... embaralhando tudo....


//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
dtmDados.CdsLocalizacao.IndexFieldNames := Column.FieldName;
Column.Title.Color := clMoneyGreen;
End;

dtmDados.CdsLocalizacao.First;
end;


Pablo_lima

Pablo_lima

Curtidas 0
POSTAR