Dúvida mestre/detalhe com ClientDataSet
22/09/2004
0
Olá amigos do fórum,
Estou utilizando D7 + ADO + TClientDataSet para criar uma relação mestre detalhe no SQL Server 7.
As instruções SQL do TADODataSet são as seguintes:
SELECT * FROM PEDIDOS WHERE CODPEDIDO=:CODPEDIDO
SELECT * FROM PEDIDOSITEM WHERE CODPEDIDO=:CODPEDIDO
Existem 2 maneiras de se fazer o relacionamento:
1) Fazer o relacionamento entre os TADODataSet, criando um aninhamento e, consequentemente, utilizando apenas um TDataSetProvider.
2) Utilizar 2 TDataSetProvider e criar o relacionamento entre os TClientDataSet.
Gostaria de saber quais as diferenças entre essas duas abordagens (Notem pela primeira cláusula SQL que apenas 1 pedido será consultado por vez).
Gostaria de saber também como utilizar campos autoincremento de maneira correta pois no momento do Insert de um Pedido o Itens não estão recebendo o número do pedido o que está gerando erro no ApplyUpdates.
Obrigado pela ajuda,
Gabriel
Estou utilizando D7 + ADO + TClientDataSet para criar uma relação mestre detalhe no SQL Server 7.
As instruções SQL do TADODataSet são as seguintes:
SELECT * FROM PEDIDOS WHERE CODPEDIDO=:CODPEDIDO
SELECT * FROM PEDIDOSITEM WHERE CODPEDIDO=:CODPEDIDO
Existem 2 maneiras de se fazer o relacionamento:
1) Fazer o relacionamento entre os TADODataSet, criando um aninhamento e, consequentemente, utilizando apenas um TDataSetProvider.
2) Utilizar 2 TDataSetProvider e criar o relacionamento entre os TClientDataSet.
Gostaria de saber quais as diferenças entre essas duas abordagens (Notem pela primeira cláusula SQL que apenas 1 pedido será consultado por vez).
Gostaria de saber também como utilizar campos autoincremento de maneira correta pois no momento do Insert de um Pedido o Itens não estão recebendo o número do pedido o que está gerando erro no ApplyUpdates.
Obrigado pela ajuda,
Gabriel
Gatoledo
Curtir tópico
+ 0
Responder
Posts
22/09/2004
Afarias
|Gostaria de saber quais as diferenças entre essas duas abordagens
|(Notem pela primeira cláusula SQL que apenas 1 pedido será consultado
|por vez).
Na forma de tabelas aninhadas vc tem a vantagen de ter toda operaçào em uma transação única, totalmente ´automatizada´ pelo provider. Entretanto, tabelas aninhadas ´as vezes´ não são boa opção justamente por causa disso mesmo, em algumas situações precisamos q a trasação do mestre seja diferente da dos detalhes.
Outra coisa ´ruim´ em tabelas aninhadas é quando vc terá ´muitos´ mestres carregados (que não é o seu caso)
|Gostaria de saber também como utilizar campos autoincremento de
|maneira correta pois no momento do Insert de um Pedido o Itens não
|estão recebendo o número do pedido o que está gerando erro no
|ApplyUpdates.
para acabar com o erro, basta colocar o campo como Required=False, e configurar o Provider com [PropagateChanges]
mas se vc deseja ver o valor no momento do Insert, utilize o evento OnNewRecond do ClientDataSet para gerar o novo valor
T+
|(Notem pela primeira cláusula SQL que apenas 1 pedido será consultado
|por vez).
Na forma de tabelas aninhadas vc tem a vantagen de ter toda operaçào em uma transação única, totalmente ´automatizada´ pelo provider. Entretanto, tabelas aninhadas ´as vezes´ não são boa opção justamente por causa disso mesmo, em algumas situações precisamos q a trasação do mestre seja diferente da dos detalhes.
Outra coisa ´ruim´ em tabelas aninhadas é quando vc terá ´muitos´ mestres carregados (que não é o seu caso)
|Gostaria de saber também como utilizar campos autoincremento de
|maneira correta pois no momento do Insert de um Pedido o Itens não
|estão recebendo o número do pedido o que está gerando erro no
|ApplyUpdates.
para acabar com o erro, basta colocar o campo como Required=False, e configurar o Provider com [PropagateChanges]
mas se vc deseja ver o valor no momento do Insert, utilize o evento OnNewRecond do ClientDataSet para gerar o novo valor
T+
Responder
Clique aqui para fazer login e interagir na Comunidade :)