Erro - Invalid Transaction Handle
olá,
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.
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
Curtidas 0
Respostas
Rodolpho123
27/09/2005
Verifique se isso ocorre com frequencia e se for, só debugando o seu sistema....
GOSTEI 0
Marcelo.l
27/09/2005
Olá, Rodolpho
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?
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
Mordred
27/09/2005
Eu também tô me lascando com esse problema. Tenho um datamodule e tenho um form. No datamodule tenho um database e uma transaction. No form tenho uma query. No evento onshow do form altero a propriedade SQL da query e quando mando ela abrir ela dá esse erro escroto aí. Não sei se ajuda, mas este é o meu código:
O erro acontece na 6ª linha ( frmMovCaixa.Query.Open;)
Será que ninguém aqui passou por isso acontecer antes???
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
Emerson Nascimento
27/09/2005
qual o banco de dados utilizado? quais os componentes utilizados para acesso ao banco de dados?
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):
se fosse num procedimento de inclusão/manipulação de dados:
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
Mordred
27/09/2005
Valeu Emerson. Agora entendi melhor, o caso é bem esse que você falou aí.
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
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
Martins
27/09/2005
qual o banco de dados utilizado? quais os componentes utilizados para acesso ao banco de dados?
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):
se fosse num procedimento de inclusão/manipulação de dados:
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