Bom dia Pessoal,
Estou com um problema aqui que já esta me dando um trabalhão ..

Tenho um sistema de biblioteca, e tive que  colocar  essa Trigger na 
tabela de empréstimo que faz a função de dar baixa na reserva quando 
a pessoa realmente locar o livro.
Ex.:
Aluno Alex reservou o livro Ciranda e cirandinha que estava 
emprestado para outra pessoa,
Quando esse livro retorno, o Alex faz o empréstimo dele.

Para não precisar da funcionária ir lá no cadastro de reservas e dar 
baixa na reserva do alex, eu montei essa trigger para fazer esse 
trabalho.  ( dar para resolver isso pelo sistema também, só que já 
tem bastante processos nele, e gostaria de dividir as tarefas com o 
Banco).

Quando eu lanço diretamente no banco o empréstimo ele dar baixa filé, 
sem problemas.
Só que, quando eu uso o sistema para lançar o empréstimo , ele lança 
e baixa também, só que o formulário fica no estado travado com o erro 
de : "A linha não pode ser localizada para atualização. Alguns 
valores podem ter sido alterados desde que foi lida pela ultima Vez". 
Já montei um sisteminha limpinho aqui só para fazer o teste, só um 
for e uma grid para lançar os valores(para ter certeza que não é a 
aplicação)  e da no mesmo. 
O interessante que uso o ADO e com o provedor OLE DB Provider SQL 
Server... 
E quando eu mudo no ADO Conect para o Olé DB Provider for ODBC, não 
aparece o erro e funciona normal, só que em contra partida o sistema 
fica igual uma tartaruga.

Parece que quando a conecção e via ODBC o sistema não captura os 
erros do banco, com isso funciona normal.

Alguém pode me dar uma ajuda com isso, pois não sei o que fazer 
mais...


Delphi 2005 com SQL Server

  

CREATE TRIGGER BaixarTítuloReservado
ON tb_BIB_Emprestimos 
FOR INSERT
AS

BEGIN

DECLARE @Exempla INT     --Declara Variável livro
DECLARE @pessoas INT     --Variável Pessoa


set @Exempla = (SELECT fkExemplar From INSERTED ) --VARIÁVEL Exempla 
RECEBE o cod do exemplar

set @pessoas = (SELECT fkPessoas From INSERTED )

    UPDATE tb_BIB_Reservas SET baixa = 'false' 
   
where   dbo.tb_BIB_Reservas.fkExemplar =...@exempla  AND 
dbo.tb_BIB_Reservas.fkpessoa = @pessoas   -- só dar baixa se for o 
mesmo exemplar e se for a mesma pessoa que reservou e 

END
GO


Responder a