icefusion 0 Denunciar post Postado Outubro 9, 2007 quando crio uma variavel do tipo TSQLQuery e jogo dentro do SQL.Add uma inserção, exclusão ou alteração, tem como eu aplicar um rollback nessa transação?!pq vejo q após ter adicionado o sql da opração, atribuído os parametros e dado um ExecSQL(); pronto ele ja executa o sql da query...porém queria dar um rollback nisso naum tem como né?!se fosse seguir os comandos rollback e commit, após executado o commit naum tem como efetuar um rollback por isso no caso acima eu naum conseguiria isso...estou certo?! Compartilhar este post Link para o post Compartilhar em outros sites
marcio.theis 3 Denunciar post Postado Outubro 9, 2007 Bom, você deve de ter um componente de acesso ao BD, o que faz a conexão, com este componente você pode inicializar uma transação, dar commit ou então dar rollback... Compartilhar este post Link para o post Compartilhar em outros sites
icefusion 0 Denunciar post Postado Outubro 9, 2007 Bom, você deve de ter um componente de acesso ao BD, o que faz a conexão, com este componente você pode inicializar uma transação, dar commit ou então dar rollback...sim sim...eu utilizo o dbx para isso....porém quando vou fazer isso manualmente...tem como executar rollback?!?não né?!o q posso fazer é se der algum erro, efetuar um delete, e ir deletando as operações q fiz?!tipow eu vou gerar uma entrada de nota e uma duplicata a partir de uma ordem de compra...ae eu faço por exemplo a entrada da nota, e se der erro na duplicata eu posso voltar excluindo tudo que fiz...porém tudo com linhas de comando,utilizando delete, correto?! Compartilhar este post Link para o post Compartilhar em outros sites
marcio.theis 3 Denunciar post Postado Outubro 9, 2007 Você provavelmente esta usando o componente TSQLConnection, então com ele poderia fazer o controle da transação, exemplo: procedure TForm1.TransferButtonClick(Sender: TObject);var Amt: Integer; TD: TTransactionDesc;begin if not SQLConnection1.InTransaction then begin TD.TransactionID := 1; TD.IsolationLevel := xilREADCOMMITTED; SQLConnection1.StartTransaction(TD); try Amt := StrToInt(AmtEdit.Text); Debit.Params.ParamValues['Amount'] := Amt; Credit.Params.ParamValues['Amount'] := Amt; SQLConnection1.Commit(TD); {on success, commit the changes}; except SQLConnection1.Rollback(TD); {on failure, undo the changes}; end; end;end; Compartilhar este post Link para o post Compartilhar em outros sites
icefusion 0 Denunciar post Postado Outubro 9, 2007 Você provavelmente esta usando o componente TSQLConnection, então com ele poderia fazer o controle da transação, exemplo: procedure TForm1.TransferButtonClick(Sender: TObject);var Amt: Integer; TD: TTransactionDesc;begin if not SQLConnection1.InTransaction then begin TD.TransactionID := 1; TD.IsolationLevel := xilREADCOMMITTED; SQLConnection1.StartTransaction(TD); try Amt := StrToInt(AmtEdit.Text); Debit.Params.ParamValues['Amount'] := Amt; Credit.Params.ParamValues['Amount'] := Amt; SQLConnection1.Commit(TD); {on success, commit the changes}; except SQLConnection1.Rollback(TD); {on failure, undo the changes}; end; end;end; mas isso vai rolar mesmo eu fazendo manualmente com o TSQLQuery....?!? Compartilhar este post Link para o post Compartilhar em outros sites
marcio.theis 3 Denunciar post Postado Outubro 9, 2007 Sim, ele vai monitorar todas os comandos executados a partir do início da transação, até que você confirme ou não o que foi feito...Pode fazer um teste no seu fonte para ver como irá ficar... Compartilhar este post Link para o post Compartilhar em outros sites
icefusion 0 Denunciar post Postado Outubro 9, 2007 Sim, ele vai monitorar todas os comandos executados a partir do início da transação, até que você confirme ou não o que foi feito...Pode fazer um teste no seu fonte para ver como irá ficar...interessante..eu achei q eu tinha que criar meu esquema de rollback.....hehehe.....eu vou testar essa parada depois q eu terminar tudo q tenho pra terminarpq por exemplo...gerar duplicatas, nota fiscais de entrada, eu gero manualmente...e naum tem nenhum controle de transação....entaum se der um pau ferra né!! Compartilhar este post Link para o post Compartilhar em outros sites
marcio.theis 3 Denunciar post Postado Outubro 9, 2007 Sim, se der erro iria ficar pendurado e perdido estes registros... Depois que fizer tudo e testar, dê um retorno se funcionou... http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif Compartilhar este post Link para o post Compartilhar em outros sites
icefusion 0 Denunciar post Postado Outubro 10, 2007 eu faço as inserções / exclusões / atualizações desta forma... como faria para encaixar nesse esquema!!é q naum entendi muito bem o exemplo!!! sqlAuxiliar:=TSQLQuery.Create(Self); with sqlAuxiliar do begin SQLConnection:=dmBASE.Conexao; SQL.Clear; SQL.Add('INSERT INTO COMPRAFROTA_ITEM_ALOCACAO(PES_DOCTO , COMP_NOTA_SERIE , COMP_NOTA_NUMERO ,'); SQL.Add(' EQTP_CODIGO , EQUI_CODIGO , COMPITAL_ALOCACAO ,'); SQL.Add(' COMPITAL_QUANTIDADE , COMPITAL_KM , EQMOVTP_CODIGO )'); SQL.Add(' VALUES(:PES_DOCTO , :COMP_NOTA_SERIE, :COMP_NOTA_NUMERO ,'); SQL.Add(' :EQTP_CODIGO , :EQUI_CODIGO , :COMPITAL_ALOCACAO,'); SQL.Add(' :COMPITAL_QUANTIDADE, :COMPITAL_KM , :EQMOVTP_CODIGO )'); ParamByName('PES_DOCTO').AsString:=edPes_Docto.Text; ParamByName('COMP_NOTA_SERIE').AsString:=edSerie.Text; ParamByName('COMP_NOTA_NUMERO').AsInteger:=StrToInt(edNumeroNF.Text); ParamByName('EQTP_CODIGO').AsInteger:=StrToInt(edTpEq_Codigo.Text); ParamByName('EQUI_CODIGO').AsInteger:=StrToInt(edEquiCodigo.Text); if (cbTpAlocacao.ItemIndex = 1) or (cbTpAlocacao.ItemIndex = 3) then ParamByName('COMPITAL_ALOCACAO').AsString:=edAlocacao1.Text else ParamByName('COMPITAL_ALOCACAO').AsString:=edAlocacao.Text; ParamByName('COMPITAL_QUANTIDADE').AsInteger:=StrToInt(edQtd.Text); ParamByName('COMPITAL_KM').AsInteger:=StrToInt(edKM.Text); ParamByName('EQMOVTP_CODIGO').AsInteger:=tpMovimento; ExecSQL(); Free;end; Compartilhar este post Link para o post Compartilhar em outros sites
marcio.theis 3 Denunciar post Postado Outubro 10, 2007 Questão de interpretação...Como no exemplo mostra, logo no início você abre a transação, abre um try e coloca o fonte dentro do Try, se der Except deve de dar rollback, se chegar ao final sem erro, da um commit na transação... Compartilhar este post Link para o post Compartilhar em outros sites