Mais duvidas sobre clientdataset

Delphi

20/01/2006

Seguinte.....tenho uma tabela de cadastro de serviços, e outra de produtos. Estou fazendo uma tela de orçamento, tenho que chamar as duas tabelas, ateh ai blz. Criei um campo Lookup no CDS para mostrar o nome dos produtos. Mas tenho que mostrar a descrição do serviço tbm, deveria criar outro campo lookup para pegar a descrição, mas dai em minha grid apareceria 2 colunas para descrição. Como faço para mostrar os dois campos em apenas uma coluna?


Mrmarcelojr

Mrmarcelojr

Curtidas 0

Respostas

Gpfranca

Gpfranca

20/01/2006

Seguinte.....tenho uma tabela de cadastro de serviços, e outra de produtos. Estou fazendo uma tela de orçamento, tenho que chamar as duas tabelas, ateh ai blz. Criei um campo Lookup no CDS para mostrar o nome dos produtos. Mas tenho que mostrar a descrição do serviço tbm, deveria criar outro campo lookup para pegar a descrição, mas dai em minha grid apareceria 2 colunas para descrição. Como faço para mostrar os dois campos em apenas uma coluna?


Pelo que eu entendi um INNER JOIN na sua instrução resolverá seu problema.


GOSTEI 0
Mrmarcelojr

Mrmarcelojr

20/01/2006

Pelo que eu entendi um INNER JOIN na sua instrução resolverá seu problema.


Resolveria, porém, as tabelas de Serviço e de Produtos estão em arquivos separados, então eu não consigui fazer uma instrução chamando bases diferentes, por isso a nescessidade de se utilizar campo lookup do ClientDataSet.

Então criei dois camposo Lookup, Descr1(que traz a descrição do produto) e descr2(que traz a descrição do serviço.

Gostaria de mesclar estas 2 colunas, como se fosse um COALESCE.

ps.: Teoricamente não adianta usar nenhuma instrução SQL, deverá ser uma função própria do CDS.....Teoricamente, pois se existira alguma forma de se realizar uma consulta em arquivos diferentes...pode manda bala.........Utilizo FB


GOSTEI 0
Aroldo Zanela

Aroldo Zanela

20/01/2006

Colega,

Coloque a DDL (Estrutura das tabelas) para um exemplo mais pragmático. A princípio, basta utilizar UNION ALL. Exemplo hipotético:

SELECT PRO_ID AS CODIGO, PRO_DESCRICAO AS DESCRICAO
FROM PRODUTOS
UNION ALL
SELECT SER_ID AS CODIGO, SER_DESCRICAO AS DESCRICAO
FROM SERVICOES



GOSTEI 0
Mrmarcelojr

Mrmarcelojr

20/01/2006

[quote:d802b8397a=´Aroldo Zanela´]Colega,

Coloque a DDL (Estrutura das tabelas) para um exemplo mais pragmático. A princípio, basta utilizar UNION ALL. Exemplo hipotético:

SELECT PRO_ID AS CODIGO, PRO_DESCRICAO AS DESCRICAO
FROM PRODUTOS
UNION ALL
SELECT SER_ID AS CODIGO, SER_DESCRICAO AS DESCRICAO
FROM SERVICOES
[/quote:d802b8397a]

Muito obrigado pela ajuda, mas as tabelas estão em arquivos distintos. A tabela de produtos (PROD) esta em 1.FDB, e a de serviços (SERV) está em mdb.FDB. Então eu não consigo fazer isto com uma consulta SQL, pois estou utilizando 2 conexões, eu DataSet está setado para SQLConn1, e o otro em SQLConn2. Por isso a nescessidade de utilizar as funções do próprio CDS.


GOSTEI 0
Aroldo Zanela

Aroldo Zanela

20/01/2006

Colega,

Entendi. Bem, desta forma eu acho que seria mais simples popular um CDS em nível de código. Exemplo:
while not PRODUTOS.eof do
begin
  cds.AppendRecord([PRODUTOSpro_id.Value, PRODUTOSpro_descricao.value]);
  PRODUTOS.next;
end;

while not SERVICOS.eof do
begin
  cds.AppendRecord([SERVICOSser_id.Value, SERVICOSser_descricao.value]);
  SERVICOS.next;
end;



GOSTEI 0
Thomaz_prg

Thomaz_prg

20/01/2006

Ou faça assim, no CDS que você quer que apareça o campo, crie um campo do tipo InternalCalc (através do Fields Editor), e passe o valor pra ee campo, no evento OnCalcFields.


GOSTEI 0
POSTAR