Ainda sobre Exceções de Banco no IW ( EDatabaseError )
23/05/2003
0
Olá a todos. Relembrando o meu problema:
Usamos no Server NT4 SP6 + Firebird, no terminal usamos XP + Delphi 7.
Bem eu afirmei que quando desenvolvo páginas Intraweb, esses formulários não tratam exceções de Banco de Dados como um erro dentro de um try/except (o Delphi trata apenas em tempo de projeto).
Exemplo: Um campo do formulário tenta gravar um dado, mas a trigger não aceita, pois está em desacordo. Então é gerada uma exceção de banco EDatabaseError com a mensagem gerada pelo banco.
O Guinter me disse para não usar try/except num ApplyUpdates, pois essas exceções nunca chegam, a menos que eu desse um ´raise´ no evento OnReconcileError.
Guinter: Não entendi como usar o raise nesse Evento, embora tenha estudado sobre o mesmo.
Mas eu pergunto: Porque num formulário VCL do Delphi essas exceções SÃO tratadas num try/except ? Porque formulários Intraweb não a tratam ?
No evento OnReconcileError, eu consigo manipular o Erro e dar uma mensagem ao usuário, mas não consigo dar um RollBack na transação.
Vejam um exemplo típico que funciona na VCL, mas não no Intraweb, com o mesmo Delphi 7 e os mesmos componentes:
procedure TfmCadastro.BotaoIWClick(Sender: TObject)
var
TD: TTransactionDesc;
begin
TD.TransactionID := 1;
TD.IsolationLevel := xilREADCOMMITTED;
try
ClientDataSet.ApplyUpdates(0);
SQLConnection.Commit( TD );
except
SQLConnection.Rollback( TD );
WebApplication.ShowMessage( ´Houve Erro na Gravação dos Dados.´ );
Abort;
end;
end;
A princípio parece a mesma coisa, pois posso criar uma variável Global no DataModule ( TD ) e manipulá-la dentro do Evento OnReconcileError para dar o Rollback.
Ou fazer como faço agora, dentro do OnReconcileError:
RWebApplication.ShowMessage( E.Message );
Action := raCorrect;
Os componentes que uso para fazer cache e updates são:
SQLConnection, SQLQuery, DataSetProvider, ClientDataSet e um DataSource.
Falei pra caramba.... ufa !
Agradeço a que ajudar.
Usamos no Server NT4 SP6 + Firebird, no terminal usamos XP + Delphi 7.
Bem eu afirmei que quando desenvolvo páginas Intraweb, esses formulários não tratam exceções de Banco de Dados como um erro dentro de um try/except (o Delphi trata apenas em tempo de projeto).
Exemplo: Um campo do formulário tenta gravar um dado, mas a trigger não aceita, pois está em desacordo. Então é gerada uma exceção de banco EDatabaseError com a mensagem gerada pelo banco.
O Guinter me disse para não usar try/except num ApplyUpdates, pois essas exceções nunca chegam, a menos que eu desse um ´raise´ no evento OnReconcileError.
Guinter: Não entendi como usar o raise nesse Evento, embora tenha estudado sobre o mesmo.
Mas eu pergunto: Porque num formulário VCL do Delphi essas exceções SÃO tratadas num try/except ? Porque formulários Intraweb não a tratam ?
No evento OnReconcileError, eu consigo manipular o Erro e dar uma mensagem ao usuário, mas não consigo dar um RollBack na transação.
Vejam um exemplo típico que funciona na VCL, mas não no Intraweb, com o mesmo Delphi 7 e os mesmos componentes:
procedure TfmCadastro.BotaoIWClick(Sender: TObject)
var
TD: TTransactionDesc;
begin
TD.TransactionID := 1;
TD.IsolationLevel := xilREADCOMMITTED;
try
ClientDataSet.ApplyUpdates(0);
SQLConnection.Commit( TD );
except
SQLConnection.Rollback( TD );
WebApplication.ShowMessage( ´Houve Erro na Gravação dos Dados.´ );
Abort;
end;
end;
A princípio parece a mesma coisa, pois posso criar uma variável Global no DataModule ( TD ) e manipulá-la dentro do Evento OnReconcileError para dar o Rollback.
Ou fazer como faço agora, dentro do OnReconcileError:
RWebApplication.ShowMessage( E.Message );
Action := raCorrect;
Os componentes que uso para fazer cache e updates são:
SQLConnection, SQLQuery, DataSetProvider, ClientDataSet e um DataSource.
Falei pra caramba.... ufa !
Agradeço a que ajudar.
Sergio_pinheiro
Curtir tópico
+ 0
Responder
Clique aqui para fazer login e interagir na Comunidade :)