Ir para conteúdo
Fórum Script Brasil
  • 0

transação


kartter

Pergunta

Estou migrando um sistema, feito com os componentes IBX, para o DBEXPRESS, e estou c/ a seguinte dúvida:

1º) Mando inserir um registro com o comando (append)

2º) Salvo com ApplyUpdates

3º) O registro é salvo fisicamente no banco, não podendo mais ser alterado certo?

E se eu estiver em uma transação do tipo:

var

Td:TTransactionDesc;

begin

td.TransactionID:=form1.Handle;

td.IsolationLevel:=xilREADCOMMITTED;

SqlConnection.StartTransaction(td);

{Insiro um registro, como no passo 1 acima}

{Salvo o registro, como no passo 2 acima}

Se eu colocar em outro button, o comando <<SqlConnection.Rollback(td)>>, a transação sofrerá rollback:

Testei esta funcionalidade, salvando os registros com <<ApplyUpdates>> e com <<Post>>, e em nenhum dos casos a transação sofreu rollback. Ela só sofreu rollback, quando coloquei o comando <<CancelUpdates>>

Como faço para cancelar uma transação?

Abraços

Karttter

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

Testei esta funcionalidade, salvando os registros com <<ApplyUpdates>> e com <<Post>>, e em nenhum dos casos a transação sofreu rollback. Ela só sofreu rollback, quando coloquei o comando <<CancelUpdates>>

Como faço para cancelar uma transação?

Uma vez que voce tenha dado o comando Post e depois ApplyUpdates, o registro foi gravado fisicamento do aquivo e neste caso não adianta dar rollback e nem Cancel

Um comando Post indica que o registro está marcado para ser gravado fisicamente no arquivo, no entanto, se o registro tiver que ser descartado, então não aplicamos o comando ApplyUpdates e sim o comando Cancel

O parametro informado no ApplyUpdates é um indicador de se e quando ele deve parar de aplicar os updates caso existam erros:

ApplyUpdates(0): não podem haver erros. Qualquer erro que ocorra, a aplicação das atualizações será paralizada.

ApplyUpdates("n"): podem haver "n" erros. Quando o número de erros atingir "n", a aplicação das atualizações será paralizada.

ApplyUpdates(-1): não importa quantos erros existirem, o que puder ser aplicado será.

Nas duas situações aonde é possível que a atualização seja paralizada, o evento OnReconcileError é disparado e você, ou o usuário, tem opção de tomar alguma providência.

Vocês devem compreender que, apesar da prática mais comum ser aplicar os updates imediatamente após os post do registro local, isto não é obrigatório. Você pode inserir 1000 registros e só então enviá-los para o banco de dados, por exemplo. Isto só é muito arriscado no dia-a-dia pois pode haver perda de trabalho, mas é o mais indicado em casos como importação de arquivos texto, por exemplo.

Sobre a dúvida em relação aos registros X, Y, Z cada registro é tratado de forma independente pela Midas. A ação raCancel aborta apenas o registro que ocasionou o erro de reconciliação, para abortar todo o update você teria que invocar o método CancelUpdates do TClientDataSet.

Só uma opinião particular: vocês estão maximizando o problema de alteração de um mesmo registro por diversos usuários . Esta situação não deve ser frequente e se for o erro está partindo do projeto.

Na "vida real" se seu projeto exige que diversos usuários fiquem alterando os registros uns dos outros o dia todo, pense bem pois foi você que errou no seu projeto.

*EU* só uso bloqueio pessimista quando estritamente necessário e não permito que o usuário tome nenhuma decisão. Se ocorrer algum erro, desfaço tudo e ele que faça novamente. Juntando todos os meus clientes, devo ter cerca de 1200 usuários e cada cliente com uma média de 25 usuários. *EU* não tenho problemas com isso.

_________________

Cordialmente,

Vinicius de Oliveira

Um artigo sobre o assunto:

http://www.guiadodelphi.com.br/ler.php?codigo=1103

Dica para Melhorar a Performance do Interbase:

http://www.csimaster.com/index.php?option=...97&Itemid=2

Utilizando os componentes da paleta DBExpress para acesso ao banco Firebird/Interbase

http://www.josevalter.com.br/download/banc...s/DBExpress.pdf

abraço

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,2k
    • Posts
      651,9k
×
×
  • Criar Novo...