Re: [firebase-br] Transação - ClientDataSet

fabio giro fabio_giro em yahoo.com.br
Sex Ago 31 10:09:02 -03 2007


Neste caso faça assim. Adapte as suas necessidades.
   
       transacao.TransactionID := 1;
     transacao.IsolationLevel := xilREADCOMMITTED;
     if not DM.Conexao.InTransaction then
        DM.Conexao.StartTransaction(Transacao);
       with DM.qryManut2 do
      begin
        sql.clear;
          if btIncAlt.caption = 'Incluir' then
         begin
           sql.add('INSERT INTO PRODUCAO (DATA, CODCARTAO, VALORFACE, QTDCARTOES, LIXO)');
           sql.add(' VALUES (:pdata, :pcodcartao, :pvalorface, :pqtdcartoes, :plixo)');
         end
        else
         begin
           sql.add('UPDATE PRODUCAO');
           sql.add(' SET DATA       = :pdata,');
           sql.add('     CODCARTAO  = :pcodcartao,');
           sql.add('     VALORFACE  = :pvalorface,');
           sql.add('     QTDCARTOES = :pqtdcartoes,');
           sql.add('     LIXO       = :plixo');
           sql.add(' WHERE CODCARTAO = :pcodcartao');
           sql.add(' AND VALORFACE = :pvalorface');
         end;
        parambyname('pcodcartao').asinteger  := strtoint(trim(RightStr(cbTpCartao.items[cbTpCartao.itemindex],2)));
        parambyname('pvalorface').Asfloat    := strtofloat(edtValorFace.text);
        parambyname('pdata').AsDate          := strtodate(meData.text);
        parambyname('pqtdcartoes').asinteger := strtoint(trim(meQuant.text));
        parambyname('plixo').asinteger       := strtoint(trim(meLixo.text));
          ExecSQL;
      end;
     with DM.qryManut2 do
      begin
        sql.clear;
          sql.add('UPDATE ESTOQUE');
        sql.add(' SET QTDCARTOES  = QTDCARTOES - :pqtdcartoes');
        sql.add(' WHERE CODCARTAO = :pcodcartao');
        sql.add(' AND VALORFACE   = :pvalorface');
          parambyname('pcodcartao').asinteger := strtoint(trim(RightStr(cbTpCartao.items[cbTpCartao.itemindex],2)));
        parambyname('pvalorface').asfloat   := strtofloat(trim(edtValorFace.text));
        parambyname('pqtdcartoes').asinteger := (strtoint(trim(meQuant.text)) + strtoint(trim(meLixo.text))) - (quant_ant + qtdlixo_ant);
          ExecSql;
      end;
     try
       DM.Conexao.Commit(transacao);
     except
       DM.Conexao.RollBack(transacao);
     end;

  Espero ter ajudado.

Felipe Aron <felipearon em gmail.com> escreveu:
  Estou usando ClientDataSet na minha aplicação e li um artigo no FireBase a
respeito: http://www.firebase.com.br/fb/artigo.php?id=156
Porém no artigo ele informa para cada tabela usar uma transação....
Mas e no caso de vendas ?? TEnho que gravar o cabeçalho de vendas + Itens.
Seguindo a lógica do artigo, posso commitar o cabeçalho e dar erro ao gravar
os itens.... nesse caso não é melhor usar apenas 1 transação ???

Outra pergunta: como fazer para commitar os dados da venda e itens
(ClientDataSet) somente quando terminar TODO o processo ??


-- 
Com a força aprenda a suavidade. Através da suavidade a força prevalecerá!
______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
Para editar sua configuração na lista, use o endereço http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
Para consultar mensagens antigas: http://firebase.com.br/pesquisa


       Flickr agora em português. Você clica, todo mundo vê. Saiba mais.


Mais detalhes sobre a lista de discussão lista