Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

icefusion

Inserção / Exclusão / Alteração manualmente sem o dbx...

Recommended Posts

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

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

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

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

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

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

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.