QUOTE(FONSENIX @ 27/10/2008 - 21:52)

Se não posso manter uma tabela aberta para mostrar itens de um pedido, porque isso acarreta em manter uma transação aberta, qual a solução que vocês usam para mostrar itens de um pedido ou vendas de um cupom?
Porque eu estava usando um DBGrid para mostrar os itens ligado a tabela de itens.
FONSENIX, na situação apresentada, pareceu que a procedure estaria tentando alterar (ou acessar) um item que estaria em edição na sua tela, e isto com a opção
wait é que poderia estar gerando o deadlock, porque a procedure estaria esperando que o item em edição fosse "liberado" para atualização.
E sendo isto, não parece mesmo fazer sentido que você editando uma informação, chame um procedimento para fazer alterações nesta mesma informação simultanemente - neste caso, você faz os processamentos com esta informação no seu código mesmo.
Algumas coisas podem ser feitas no momento em que os dados vão para o banco, que é quando você utiliza as triggers.
Não sendo o que ocorreu, reveja as suas configurações de transações, porque que se eu entendi direito, o uso do MDODataSet não é o mesmo de um MDOTable. Isso porque os dados são retornados por uma
consulta SQL, e as atualizações no banco são feitas através das outras propriedades (InsertSQL, DeleteSQL, UpdateSQL - acho que são esses os nomes da propriedade). Este componente é praticamente uma agregação de dois da paleta IB (IBSQL e IBUpdate).
Observe que a alteração de um mesmo registro por duas pessoas é possível, mas o banco vai gerenciar isto conforme definida na transação. Leia aquele artigo que citei e faça uns testes trabalhando com algumas combinações. Trabalhando com DBGrid, visualizando os dados, se você usar
Commit na transação que está associada ao componente ligado ao DBGrid, a transação será fechada e você terá sua consulta fechada (se não estou enganado), então, nestes casos use
CommiteRetained (teste e confira, se é isto mesmo).
Abraços