Fórum Dúvida a respeito de transação dbexpress (msg erro) #335033
21/12/2006
0
0 botão gravar
1 inicio uma transação
2 gravo os dados em uma tabela X (post)
3 applyupdates na tabela X
4 executo uma sp que retorna um erro devido a uma informação errada na tela de cadastro
5 executo um rollback
6 corrijo a informação que estava errada na tela
7 botão gravar
8 gravo os dados em uma tabela X (post)
9 applyupdates na tabela X --->>> ERRO! registro não encontrado (record not found or changed ....)
Analizando o log do SQLMonitor vejo que a primeira vez que tenta gravar na tabela X o comando é um INSERT mas na segunda vez o comando é um UPDATE, como não tinha sido gravado nada (por causa do erro na SP que gerou um rollback) o UPDATE falha
Após o rollback o provider não teria que tentar inserir novamente o registro? O que estou fazendo de errado?
Rodrigo Buschmann
Curtir tópico
+ 0Posts
21/12/2006
Rodrigo Buschmann
Primeiro SQL gerado:
insert into ´LANC_PDV´
(´ID_LANC_PDV´, ´COD_LANC_PDV´, ´TIPO_CARTAO´, ´NR_INICIAL´, ´NR_FINAL´, ´VALOR´)
values
(?, ?, ?, ?, ?, ?)
Segundo SQL gerado:
update ´LANC_PDV´ set
´NR_INICIAL´ = ?,
´NR_FINAL´ = ?,
´VALOR´ = ?
where
´ID_LANC_PDV´ = ?
Aí que dá erro no update pois devido ao erro na SP foi dado um rollback
Gostei + 0
21/12/2006
Macario
O que exatamente é executada para correção no [b:b54e02bd4d]item 6[/b:b54e02bd4d]?
[]´s
Gostei + 0
21/12/2006
Rodrigo Buschmann
Existe um relacionamento mestre/detalhe +- como uma nota fiscal (cabeçalho e ítens)
No detalhe, que é uma grid, o usuário digita um nr inicial e final, que são números de cartão telefônicos que estão sendo vendidos.
Como é inviável digitar número por número, motivo pelo qual se coloca o inicial e final, uma SP vai no banco de dados e grava numa tabela de cartões cadastrados que eles foram vendidos
Ocorre que o usuário pode digitar um número de cartão inexistente ou já vendido, isso gera uma exception no BD avisando da situação e um rollback para cancelar também a gravação daquelas tabelas mestre/detalhe que citei lá em cima
O ìTEM 6 se resume então ao usuário voltar na grid, corrigir o numero do cartão e pressionar ´gravar novamente´. Com isso todo o processo é refeito, post na mestre/detalhe e na tentativa do applyupdate dá o erro pois, como falei, é gerado um UPDATE em vez do INSERT
[img:00541ef2b0]http://www.digibyte.inf.br/imagem.gif[/img:00541ef2b0]
Gostei + 0
21/12/2006
Macario
Temos que descobrir pq No segundo ApplyUpdates o State da tabela esta como Edit e não Insert.
vou tentar simular o caso.
[]´s
Gostei + 0
21/12/2006
Rodrigo Buschmann
http://www.digibyte.inf.br/codigo.txt
Gostei + 0
21/12/2006
Rodrigo Buschmann
Bem, se fosse pra mim gerar os sql´s poderia contornar isso mas vou ter que mudar tudo e deve existir algum detalhe pra arrumar isso, não é possível ...
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)