Pergunta

É possível colocar os resultados de mais de uma consulta em mais de uma tabela em um TClientDataset?

Apenas algo como

SELECT * from t1;
SELECT * from t2;
SELECT * from t3;

Eu não consigo descobrir uma maneira de obter um provedor de dados (SetProvider) para puxar em resultados de mais de uma mesa ao mesmo tempo.

Foi útil?

Solução

Não há uma maneira de ter vários dados da tabela no mesmo TClientDataSet como você referenciado. O TClientDataSet contém um único cursor para um único conjunto de dados.

Outras dicas

ClientDatasets pode conter campos que são eles próprios outros conjuntos de dados. Então, se você quer criar três tabelas em um único conjunto de dados, criar três ClientDatasets segurando os três conjuntos de resultados que deseja, e então você pode colocá-los em um único ClientDataSet.

Este artigo:

http://dn.codegear.com/article/29001

mostra como fazê-lo, tanto em tempo de execução e em tempo de projeto. Preste atenção especial para a seção intitulada:

"Criando uma estrutura ClientDataSet's no tempo de execução usando TFields"

A única forma seria a de unir as tabelas. Mas então você tem que fornecer os critérios da junção através de chaves estrangeiras unidas.

select * from t1, t2, t3 where t1.key = t2.key and t2.key = t3.key;

Agora, suponha que você veio com uma chave (como LineNr), que permitiria para tal uma junção. Você, então, poderia usar uma junção externa completa para incluir todos os registros (importante se não todas as mesas têm o mesmo número de linhas). Mas isso, de alguma forma ser um hack. Ser-se de não ter auto_number para a chave, como faz chaves não reutilização e, portanto, tende a deixar buracos na numeração, resultando em muitas linhas que são apenas parcialmente preenchidos com valores.

Se você quiser preencher um ClientDataSet de várias tabelas que possuem o mesmo conjunto de campos, você pode usar o operador UNION para fazê-lo. Isso só vai usar as mesmas colunas e combinar todas as linhas em uma tabela.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top