Fórum Erro - Invalid Transaction Handle #52946
27/09/2005
0
Um cliente me ligou informando que ao chegar ao servidor viu as seguintes telas de erros:
“Invalid Transaction Handle”
“Expecting Transaction Start”
“Attached reclosed cursor”
Apesar de tudo o programa continuou rodando normalmente.
Alguém sabe quando ou porque isto acontece.
Valeu.
Marcelo.l
Curtir tópico
+ 0Posts
27/09/2005
Rodolpho123
Gostei + 0
27/09/2005
Marcelo.l
Na verdade o programa ja roda a quase um ano
e é a primeira vez que me informam esta mensagem de erro.
Vc sabe porque ela pode ocorrer?
Gostei + 0
09/11/2005
Mordred
Procedure ListaPDV; Begin frmMovCaixa.Query.Close; frmMovCaixa.Query.SQL.Clear; frmMovCaixa.Query.SQL.Add(´SELECT DISTINCT PDV FROM CAIXA ORDER BY PDV´); frmMovCaixa.Query.Open; frmMovCaixa.Query.First; frmMovCaixa.cmbPDV.Items.Clear; frmMovCaixa.cmbPDV.Items.Add(´Todos´); While Not frmMovCaixa.Query.Eof Do Begin frmMovCaixa.cmbPDV.Items.Add(frmMovCaixa.Query.Fields[0].AsString); frmMovCaixa.Query.Next; End; End;
O erro acontece na 6ª linha ( frmMovCaixa.Query.Open;)
Será que ninguém aqui passou por isso acontecer antes???
Gostei + 0
09/11/2005
Emerson Nascimento
antes de efetuar quaisquer procedimentos de consulta/inserção, verifique se não há transações abertas.
1. se houver transações abertas, tente ´comitá-las´ (em caso de erro faça um rollback)
2. abra uma nova transação.
3. efetue os procedimentos necessários.
4. tente ´comitar´ a transação (em caso de erro faça um rollback)
por exemplo (supondo que nesse momento não deveria ter qualquer transação aberta):
Procedure ListaPDV; Begin if frmMovCaixa.Query.SQLConnection.InTransaction then try frmMovCaixa.Query.SQLConnection.Commit; except frmMovCaixa.Query.SQLConnection.RollBack; end; frmMovCaixa.Query.Close; frmMovCaixa.Query.SQL.Clear; frmMovCaixa.Query.SQL.Add(´SELECT DISTINCT PDV FROM CAIXA ORDER BY PDV´); frmMovCaixa.Query.Open; frmMovCaixa.Query.First; frmMovCaixa.cmbPDV.Items.Clear; frmMovCaixa.cmbPDV.Items.Add(´Todos´); while Not frmMovCaixa.Query.Eof Do Begin frmMovCaixa.cmbPDV.Items.Add(frmMovCaixa.Query.Fields[0].AsString); frmMovCaixa.Query.Next; End; End
se fosse num procedimento de inclusão/manipulação de dados:
Procedure GravaPDV;
Begin
if SQLConnection.InTransaction then
try
SQLConnection.Commit;
except
SQLConnection.RollBack;
end;
SQLConnection.StartTransaction;
try
{procedimento para manipulação do estoque}
{procedimento para gravação do PDV em si}
{procedimento para alterações estatísticas do cliente}
{procedimento para alterações dos acumulados de vendas}
SQLConnection.Commit;
except
SQLConnection.RollBack;
{Exibe mensagem de erro}
end;
EndGostei + 0
09/11/2005
Mordred
Mas como meu caso era bem mais simples e não envolvia alteração de dados, já consegui resolver aqui. Simplesmente deixei em branco a propriedade Transaction da Query e beleza, funcionou. Mas a alternativa que você passou aí é bem interessante para casos mais complicados.
Valeu mesmo. XD
Gostei + 0
12/11/2005
Martins
Procedure ListaPDV; Begin if frmMovCaixa.Query.SQLConnection.InTransaction then try frmMovCaixa.Query.SQLConnection.Commit; except frmMovCaixa.Query.SQLConnection.RollBack; end; frmMovCaixa.Query.Close; frmMovCaixa.Query.SQL.Clear; frmMovCaixa.Query.SQL.Add(´SELECT DISTINCT PDV FROM CAIXA ORDER BY PDV´); frmMovCaixa.Query.Open; frmMovCaixa.Query.First; frmMovCaixa.cmbPDV.Items.Clear; frmMovCaixa.cmbPDV.Items.Add(´Todos´); while Not frmMovCaixa.Query.Eof Do Begin frmMovCaixa.cmbPDV.Items.Add(frmMovCaixa.Query.Fields[0].AsString); frmMovCaixa.Query.Next; End; End
Procedure GravaPDV;
Begin
if SQLConnection.InTransaction then
try
SQLConnection.Commit;
except
SQLConnection.RollBack;
end;
SQLConnection.StartTransaction;
try
{procedimento para manipulação do estoque}
{procedimento para gravação do PDV em si}
{procedimento para alterações estatísticas do cliente}
{procedimento para alterações dos acumulados de vendas}
SQLConnection.Commit;
except
SQLConnection.RollBack;
{Exibe mensagem de erro}
end;
EndUma solução profissional para uma questão complicada, boa [b:f13dea5f6d]Emerson.en[/b:f13dea5f6d].
Blz!!!
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)