Ir para conteúdo
  • Cadastre-se

MSOL

Membros Pro
  • Total de ítens

    34
  • Registro em

  • Última visita

Sobre MSOL

Últimos Visitantes

O bloco dos últimos visitantes está desativado e não está sendo visualizado por outros usuários.

MSOL's Achievements

Explorer

Explorer (4/14)

  • One Year In
  • Collaborator Rare
  • First Post
  • Conversation Starter
  • One Month Later

Recent Badges

14

Reputação

  1. mesmo usando em duas etapas e gerando as senhas de APP, não estou conseguindo enviar. Conta no Outlook; Alguem tem alguma solução? Como usar Auth2?
  2. Boa tarde, Juliomar! Eu resolvi o problema e vou postar aqui se alguem tiver o mesmo problema; Como eu precisava gerenciar a transação de bancos distintos(porem mesmo DBMS), a solução foi usar o FDManager(não conhecia como funcionava); Fiz assim: While Not .... Begin try conexaoAtual := TFDConnection.Create(nil); conexaoAtual.TxOptions.AutoCommit:= false; conexaoAtual.TxOptions.DisconnectAction:= xdNone; transacao:= TFDTransaction.Create(nil); transacao.Options.DisconnectAction:= xdNone; transacao.Options.AutoCommit:= false; transacao.Connection:= ConexaoAtual; TabelaPrincipa:= TFDQuery.Create(nil); TabelaPrincipal.Connection:= ConexaoAtual; TabelaPrincipal.UpdateTransaction:= transacao; TabelaPrincipal.Transaction:= transacao; ConexaoAtual.transaction:= transacao; transacao.StartTransaction; // faz aqui os inserts, updates etc... usando a query TabelaPrincipal // Aqui foi o pulo do gato. Ao inves de usar transacao. commit, chamo os metodos , criei 2 metodos, uma para commitar e outro para da Rollback CommitAllTransactions; except RollbackAllTransactions; end end procedure CommitAllTransactions; var FDManager: TFDManager; i: integer; begin FDManager := TFDManager.Create(nil); // Percorrer todas as conexões ativas for I := 0 to FDManager.ConnectionCount -1 do if FDManager.Connections[i].InTransaction then Connections[i].commit; end; procedure RollbackAllTransactions; var FDManager: TFDManager; i: integer; begin FDManager := TFDManager.Create(nil); // Percorrer todas as conexões ativas for I := 0 to FDManager.ConnectionCount -1 do if FDManager.Connections[i].InTransaction then Connections[i].Rollback; end; Espero que possa ser util para alguém Obrigado Juliomar pela atenção
  3. Não tem. As ações que estou fazendo está neste exemplo. Em momento alguma faço TFDConnection.StarTransaction;
  4. Boa tarde, Juliomar! Eu desabilitei o autocommit do TFDConnection; vou demostrar como fiz COnexao = TFDConnection que é criado dentro da classe ConfiguraEmpresa. While Not DmPrincipal.QrEmpCad.Eof Do Begin Try ConfiguraEmpresa(RetornaAlias(DmPrincipal.QrEmpCadCODIGOEMPRESA.Value)); aqui crio a conexão para cada banco existente transacao:= TFDTransaction.Create(nil); transacao.Connection:= Conexao; FrPrincipal.conexaoteste.UpdateOptions.LockWait := False; transacao.Options.ReadOnly := False; transacao.Options.Isolation := xiReadCommitted; transacao.StartTransaction; Gravar; aqui grava os registros suando um TFDQuery apontado para COnexao Except transacao.Rollback; Application.MessageBox(Pchar('Não foi possível gravar Registro na empresa ' + FormatFloat('000',DmPrincipal.QrEmpCadCODIGOEMPRESA.Value)),'Atenção',MB_ICONEXCLAMATION); exit; End; DmPrincipal.QrEmpCad.Next; End; transacao.Commit; O que está de errado no codigo?
  5. Boa tarde, Juliomar! Mesmo lendo e tentando implementar não obtive sucesso!, gera o mesmo erro . Connection must is active Vc teria um exemplo como ficaria no meu caso?
  6. MSOL

    Múltiplas transações

    Bom dia! Não estou conseguindo trabalhar com varias transações. Nosso sistema trabalha com empresa cadastro, ou seja, posso ter varios bancos(empresa), mas todo cadastro é realizado em apenas uma que persiste as informações nos outro banco. Ex: cadastro um produto na empresa 1 e replica para empresa 2, 3 etc... Só que se por algum motivo falhar a inserção das informações na empresa3, por exemplo, preciso abortar o cancelamento no outros banco tbm. Uso firedac com firebird. Tentei assim: transacao = TFDTrasaction e ADCEmpresa = TFDConnection ADCEmpresa.Transaction:= transacao; transacao.StartTransaction; vEmpAtual := FrPrincipal.vAliasEmp; While Not DmPrincipal.QrEmpCad.Eof Do Begin Try If FrPrincipal.CodigoEmpresaCad > 0 Then ConfiguraEmpresa(RetornaAlias(DmPrincipal.QrEmpCadCODIGOEMPRESA.Value)); // aqui eu crio uma nova conexão em outro banco if FrPrincipal.CodigoEmpresaCad > 0 then Gravar(Trunc(DMPrincipal.QrEmpCadCODIGOEMPRESA.Value)) else Gravar(FrPrincipal.CodigoEmpresa); If FrPrincipal.CodigoEmpresaCad <= 0 Then exit; Except transacao.Rollback; Application.MessageBox(Pchar('Não foi possível gravar Registro na empresa ' + FormatFloat('000',DmPrincipal.QrEmpCadCODIGOEMPRESA.Value)),'Atenção',MB_ICONEXCLAMATION); exit; End; DmPrincipal.QrEmpCad.Next; End; transacao.Commit; Mas da erro no rollback, com o erro mais ou menos assim connection must is active Como faria isso?
  7. Deu certinho! Obrigado, Pedro!
  8. Obrigado pela resposta, Pedro. Porém, como pegará a ultima entrada, no caso tem que ser com max(NfEntrada.DataEntrada) que está somente na tabela Nfentrada
  9. Boa tarde! Não tenho muita experiencia no Firebird. Precisava atualizar a origem dos meus produtos de acordo com a ultima nota de entrada, mas não sei como fazer no firebird, pois uso o Firebird 2,5(não tem merge e nem aceita with para update como no SqlServer) Tabelas e campos envolvidos: Produtos.Codigo e Produtos.Origem. NfEntrada.DataEntrada, NfEntrada.Serie, NfEntrada.DataEmissao, NfEntrada.Numero ITNfEntrada.Serie, ITNfEntrada.DataEmissao, ITNfEntrada.Numero, ITNfEntrada.CodProduto, ITNfEntrada.Origem,
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.

The popup will be closed in 10 segundos...