Fórum Indexar coluna dbgrid aonde o field é um campo fkLookup #364054

18/09/2008

0

Amigos!

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

Devmedia

Responder

Posts

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]


Responder

Gostei + 0

18/09/2008

Marco Salles

lucasfss o clientDataSet não permite Indexar [b:1457ef49a9]campos , LooKup[/b:1457ef49a9] (que é o seu caso) , agregados,calculados, do Tipo Blob e se não me falha a memória de Tipos MEMO

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.


Responder

Gostei + 0

19/09/2008

Devmedia

[quote:a9c4bb27f0=´Marco Salles´] do Tipo Blob e se não me falha a memória de Tipos MEMO

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.


Responder

Gostei + 0

19/09/2008

Edsant

um exemplo de comando join:
[b:c7736edc26]SELECT * FROM EDLAN LEFT JOIN EDPROPRIETARIO ON
EDLAN.CODPROPRIETARIO=EDPROPRIETARIO.CODPROPRIETARIO
ORDER BY EDPROPRIETARIO.NOMEPROPRIETARIO[/b:c7736edc26]


Responder

Gostei + 0

19/09/2008

Marco Salles

Amigo, obrigado pela resposta. Mas o meu campo que criei no ´NEW FIELD´ do ClientDataSetProdutos é STRING, desculpe não ter informado isto ateriormente.


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 :?: :?: :?: :?:

Agora, como proceder com este comando join? Não entendi! Agradeço à atenção.


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


Responder

Gostei + 0

19/09/2008

Devmedia

Amigos!
Muito obrigado pelas ajudas!
Consegui aqui utilizando o comando join.

Muito obrigado mesmo.


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar