Fórum Atualizar outras tabelas com clientdataset.applyupdates no datasnap #523261

18/06/2015

0

se eu tenho uma tabela onde quando eu gravar dados nela eu necessite atualizar dados em outras.
por exemplo ao gravar o item vendido baixar o estoque físico no itens estoque?
ao gravar uma entrada gerada a partir de um pedido, atualizar o status do pedido?


sei q posso fazer isso com triggres, mas tem situações que ocorrem manutenção no bd e as triggers não ajudam. prefiro nao utilizar. quero utilizar o bd so pra armazenar os dados.
Dorivan Sousa

Dorivan Sousa

Responder

Posts

23/06/2015

Marisiana Battistella

Eu não sei trabalhar com DATASNAP, mas se eu já tratei situações assim no banco de dados executando uma única procedure.
por exemplo ao gravar o item vendido baixar o estoque físico no itens estoque?[/quote

A procedure irá receber as informações referente ao item vendido e irá retornar uma variável ou uma mensagem que indique sucesso ou erro na execução.
Na procedure:
1) Insere o item vendido
2) Verifica se o item foi inserido com sucesso,
* Realiza a baixa (alteração) do estoque;
* Se alterou o estoque com sucesso: Retorna OK
Senão: Retorna ERRO;
3) Senão: Retorna o ERRO
Responder

Gostei + 0

23/06/2015

Dorivan Sousa

Sim eu pensei nessa possibilidade... Mas no caso com datasnap o clientdatset fica na aplicação cliente e o servidor é quem tem o (no caso do dbexpress) sqlquey e eu queria fazer a gravação dos dados usando esse recurso e a medida q confirmar no servidor atualizar outras tabelas... Eu já trabalho tres camadas no delphi com OO, MVC e um framework ORM (que to pensando em trocar pelo mORMot)... So q eu queria essa opção com clientdatset pra aproveitar um código de uma aplicação mais antiga que nao quero reescrever.
Responder

Gostei + 0

24/06/2015

Valquiria Silva

Dorivan, vc quer que o Clientdataset dispare esse processo, para o servidor executar?
Responder

Gostei + 0

24/06/2015

Dorivan Sousa

isso Valquiria Silva... eu vou usar o clientdataset mestre-detalhe, quando faz o applyupdates do mestre ele grava tanto os dados dele como os do detalhe... nessa hora que eu precisaria executar uma rotina adicional e que seja dentro da transação do clientdataset pois se ocorrer um erro tem q reverter tudo.
Responder

Gostei + 0

24/06/2015

Dorivan Sousa

eu poderia usar o beforeAppyUpdates do datasetprovider no servidor, mas nao sei como jogar dentro da mesma transacao e abortar em caso de erro.
Responder

Gostei + 0

24/06/2015

Marisiana Battistella

Me desculpe se a minha resposta foi tão simples, não imaginei a proporção do que você precisa fazer...
Encontrei esse artigo: ApplyUpdate Aplicação de atualizações para mais de um ClientDataSet em uma única transação com DataSnap
Veja se ele pode te ajudar...
Responder

Gostei + 0

24/06/2015

Marisiana Battistella

Neste post, compartilharam algumas informações sobre esse assunto: TRANSAÇÕES EM UM SERVIDOR DATASNAP EM CONJUNTO COM OPERAÇÕES COM CLIENTDATASETS
Responder

Gostei + 0

24/06/2015

Valquiria Silva

Você pode abrir uma transação no servidor pelo cliente o que quebraria conceitualmente sua estrutura de camadas, mas resolveria.

Para manter a integridade do modelo, vai precisa manipular algum dos eventos do DataSetProvider (AfetrApplyUpdates, BeforeApplyUpdates), a transação teoricamente já estará aberta. Para abortar seria o padrão do ApplyUpdates(0) , 0 (se deu tudo certo ok, se der qualquer erro volta tudo), > 1 tolera até esse numero de erros, ou -1 que vai dar Commit no que der certo independente no numero de erros.

Não sei se funciona, mas seria meu primeiro teste. Boa sorte.
Responder

Gostei + 0

24/06/2015

Dorivan Sousa

quebrando o conceito da estrutura de camadas fazendo a transacao no client e usando o beforeApplyUpdates eu poderia disparar uma exception que pararia o processo em caso de erro.

os artigos do marcos salles sao excelentes... mas pra usar a transacao no client se torna mais rapido pra aproveitar o codigo atual. vou tentar essa solucao.


thanks!!
Responder

Gostei + 0

24/06/2015

Marisiana Battistella

Por nada Dorivan!
Informe a sua evolução... Se tiver algo mais que eu possa ajudar ou se eu encontrar mais algum conteúdo, postarei aqui.
Responder

Gostei + 0

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

Aceitar