Fórum Indexar coluna dbgrid aonde o field é um campo fkLookup #364054
18/09/2008
0
Estou precisando da ajuda de vocês!
Estou fazendo uma consulta SQL aonde me retorna os dados que nescessito. Nescessariamente eu criei campos na minha tabela principal fields que servem para referenciar outra tabela, exemplo:
tabela produtos : CODIGO_ID, NOME, CODIGO_ID_COR, ATIVO, DATA_CADASTRO;
tabela cores : CODIGO_ID, NOME, ATIVO, DATA_CADASTRO;
No meu ClientDataSetProdutos eu criei um novo field chamado NOME_COR e fiz um ´fkLookup´ ligando as duas tabelas. Aonde o ordem de consulta seria através do CODIGO_ID_COR ligada ao CODIGO_ID do ClientDataSetCores e seu resultado seria o NOME da cor, entenderam?
Agora aqui está meu problema e dúvida.
Eu preciso dentro do meu DBGrid aonde mostro o cadastro dos produtos que classifique/ordene pelo campo NOME DA COR.
Se eu fizer isto:
ClientDataSetProdutos.Active := False; SQLQueryProdutos.Close; SQLQueryProdutos.SQL.Clear; SQLQueryProdutos.SQL.Add(´select * from CADASTRO_DE_PRODUTOS order by NOME_COR´); SQLQueryProdutos.Open; ClientDataSetProdutos.Active := True;
[b:3379c44e94]Ele me resulta que o Field NOME_COR não pode ser localizado.[/b:3379c44e94]
Se eu fizer a ordenação através do ClientDataSet assim:
ClientDataSetProdutos.Active := False; SQLQueryProdutos.Close; SQLQueryProdutos.SQL.Clear; SQLQueryProdutos.SQL.Add(´select * from CADASTRO_DE_PRODUTOS´); SQLQueryProdutos.Open; ClientDataSetProdutos.Active := True; ClientDataSet.IndexName := ´NOME_COR´;
[b:3379c44e94]Ele me resulta a seguinte mensagem de erro: Field index out of range[/b:3379c44e94]
Alguém pode me responder como proceder?
Ou se não é possível realmente fazer este tipo de ordenação em cima de um campo criado como fkLookup?
Lembrando que se eu colocar qualquer outro campo, funciona corretamente.
*Utilizo : Delphi 2007 for Win32
BD : MySQL 5.0.4
Conexão : SQLConnection / SQLQuery / DataSetProvider / ClientDataSet / DataSource
Agradeço ajuda.
Abraço.
Devmedia
Curtir tópico
+ 0Posts
18/09/2008
Devmedia
ClientDataSetProdutos.Active := False; SQLQueryProdutos.Close; SQLQueryProdutos.SQL.Clear; SQLQueryProdutos.SQL.Add(´select * from CADASTRO_DE_PRODUTOS´); SQLQueryProdutos.Open; ClientDataSetProdutos.Active := True;
ClientDataSet.[b:7e4083c183]IndexFieldName[/b:7e4083c183] := ´NOME_COR´;
Também resulta a mesma mensagem de erro: [b:7e4083c183]Field index out of range[/b:7e4083c183]
Gostei + 0
18/09/2008
Marco Salles
Porém como o seu caso ?
Faça um Join entre a tabela produtos e a Tabela cores
Ai sim , vce poderá Ordenar sua Pesquisa (´consulta´) pelo campo NOME DA COR.
Gostei + 0
19/09/2008
Devmedia
Porém como o seu caso ?
[/quote:a9c4bb27f0]
Amigo, obrigado pela resposta.
Mas o meu campo que criei no ´NEW FIELD´ do ClientDataSetProdutos é [b:a9c4bb27f0]STRING[/b:a9c4bb27f0], desculpe não ter informado isto ateriormente.
Agora, como proceder com este comando join?
Não entendi!
Agradeço à atenção.
Gostei + 0
19/09/2008
Edsant
[b:c7736edc26]SELECT * FROM EDLAN LEFT JOIN EDPROPRIETARIO ON
EDLAN.CODPROPRIETARIO=EDPROPRIETARIO.CODPROPRIETARIO
ORDER BY EDPROPRIETARIO.NOMEPROPRIETARIO[/b:c7736edc26]
Gostei + 0
19/09/2008
Marco Salles
Vc não entendeu...
Veja :
lucasfss o clientDataSet não permite Indexar campos , LooKup (que é o seu caso) .. mesmo ele definido como sendo String
E Acrescentei :
Tb nãp permite indexar campos agregados,calculados, do Tipo Blob e se não me falha a memória de Tipos MEMO .. < e nenhum deles no momento se enquadra ao seu caso. Mas se futuramente tiver esta duvida saiba que não sera possivel , salvo que hala uma evolução no componente clientDataSet >
Entendeu :?: :?: :?: :?:
Então tente seguir o que o colega postou
um exemplo de comando join: SELECT * FROM EDLAN LEFT JOIN EDPROPRIETARIO ON EDLAN.CODPROPRIETARIO=EDPROPRIETARIO.CODPROPRIETARIO ORDER BY EDPROPRIETARIO.NOMEPROPRIETARIO
boa sorte
Gostei + 0
19/09/2008
Devmedia
Muito obrigado pelas ajudas!
Consegui aqui utilizando o comando join.
Muito obrigado mesmo.
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)