Ir para conteúdo
AVISO AOS MEMBROS:

Fizemos uma atualização em 18/06/2023, e a forma de acesso ao Fórum mudou. Não mais está sendo aceito o login pelo Nome de Exibição cadastrado. Agora, apenas pelo email e pelos integradores de Login do Facebook, Google e Microsoft. O Facebook estava com uma validação pendente e já foi normalizado o acesso, já o Google, ainda estamos verificando o que está ocorrendo que não está funcionando.
Caso precisem de ajuda para o login pelo email acesse o link << Esqueci minha senha de acesso>> ou nos envie um pedido de ajuda pelo email admin@forumrm.com.br

Administração
ForumRM

Trigger na TMOV<b> (Resolvido)</b>


Thiago Franzoi

Posts Recomendados


  • Tópicos Que Criei:  2
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  6
  • Conteúdo/Dia:  0.00
  • Reputação:   0
  • Pontos/Conquistas:  50
  • Conteúdo Resolvido:  0
  • Dias Ganho:  0
  • Status:  Offline

Olá pessoal, meu primeiro post, e estou a pouco tempo no mundo RM.

Primeiramente queria dar os parabéns ao forum, muito bom e ajuda muito nos momentos de sufoco.

Vamos lá. Estou com um problema em executar uma trigger, e gostaria se alguém poderia me ajudar.

ALTER TRIGGER [dbo].[envia_email]
ON [CorporeRm_Cobaia].[dbo].[TMOV]
AFTER INSERT, UPDATE 
AS
BEGIN TRANSACTION

DECLARE @TIPOMOV VARCHAR(10)
SET @TIPOMOV = (SELECT CODTMV FROM INSERTED)

IF @TIPOMOV = '1.1.01'
BEGIN
	EXEC msdb.dbo.sp_send_dbmail
		@profile_name = 'Compras',
		@recipients = 'thiago@rmmaringa.com.br',
		@body = 'Teste de E-mail',
		@subject = 'Notificação de Solicitação de Compra';
END

COMMIT TRANSACTION

O objetivo dessa trigger, é quando o cara inserir uma nova solicitação de compra, seja enviado um e-mail para a pessoal responsável pela aprovação automaticamente.

Obs. Quando eu rodo a trigger, simulando um INSERT direto pelo banco, não da erro nenhum, e ele envia o e-mail. Agora quando eu faço pelo sistema, inserindo um novo movimento, ele dá a seguinte mensagem:

No user transaction is currently in progress.

The ROLLBACK TRANSACTION request has no corresponding BEGIN TRANSACTION.

Desde já agradeço a atenção de todos.

Até mais.

Thiago Franzoi

thiago@rmmaringa.com.br

post-2962-1213190041_thumb.jpg

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  15
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  548
  • Conteúdo/Dia:  0.09
  • Reputação:   1
  • Pontos/Conquistas:  2.891
  • Conteúdo Resolvido:  0
  • Dias Ganho:  1
  • Status:  Offline
  • Idade:  44

Thiago,

Por que você está criando uma transação para essa operação?

Att,

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  885
  • Tópicos/Dia:  0.13
  • Meu Conteúdo:  8.802
  • Conteúdo/Dia:  1.34
  • Reputação:   291
  • Pontos/Conquistas:  106.268
  • Conteúdo Resolvido:  0
  • Dias Ganho:  185
  • Status:  Offline
  • Idade:  51
  • Dispositivo:  Windows

Quando vc está rodando pelo Query Analizer, vc está usando qual o usuário ? Está conectado como ?

Já pelo RM, provavelmente está conectado com o usuário RM...

Será que não é porque no primeiro caso, está rodando pelo sa ( system administrator ) e no RM pelo usuário RM, que está sem acesso para usar essa função do banco de dados ?

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  2
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  6
  • Conteúdo/Dia:  0.00
  • Reputação:   0
  • Pontos/Conquistas:  50
  • Conteúdo Resolvido:  0
  • Dias Ganho:  0
  • Status:  Offline

Thiago,

Por que você está criando uma transação para essa operação?

Att,

A principio por segurança, na realidade sempre costumo usar. Mas acredito não dar interferência.

Grato pela atenção.

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  15
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  548
  • Conteúdo/Dia:  0.09
  • Reputação:   1
  • Pontos/Conquistas:  2.891
  • Conteúdo Resolvido:  0
  • Dias Ganho:  1
  • Status:  Offline
  • Idade:  44

Thiago,

Eu perguntei porque você está iniciando uma transação e sempre 'comita'. Será que não está dando um erro da execução do BEGIN da Trigger e como não trata a exceção da transação o sistema espera o ROLLBACK e não o encontra?

Att,

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  2
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  6
  • Conteúdo/Dia:  0.00
  • Reputação:   0
  • Pontos/Conquistas:  50
  • Conteúdo Resolvido:  0
  • Dias Ganho:  0
  • Status:  Offline

Quando vc está rodando pelo Query Analizer, vc está usando qual o usuário ? Está conectado como ?

Já pelo RM, provavelmente está conectado com o usuário RM...

Será que não é porque no primeiro caso, está rodando pelo sa ( system administrator ) e no RM pelo usuário RM, que está sem acesso para usar essa função do banco de dados ?

Olá Jair obrigado pela atenção, então nos dois casos o acesso está sendo pelo usuário RM.

Será que não pode ser alguma questão de vinculação entre as tabelas, ou seja, pelo que eu reparei ele tenta rodar a trigger antes do movimento ser inteiramente salvo, ai fiquei na dúvida, sera que a trigger não esta sendo disparada antes da conclusão do insert no sistema?? Será que eu tenho que colocar a trigger em outra tabela??

Grato pela atenção.

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  2
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  6
  • Conteúdo/Dia:  0.00
  • Reputação:   0
  • Pontos/Conquistas:  50
  • Conteúdo Resolvido:  0
  • Dias Ganho:  0
  • Status:  Offline

Thiago,

Eu perguntei porque você está iniciando uma transação e sempre 'comita'. Será que não está dando um erro da execução do BEGIN da Trigger e como não trata a exceção da transação o sistema espera o ROLLBACK e não o encontra?

Att,

Olá Maffra, então entendi seu questionamento e fiz a mudança no código, mas continua o mesmo erro.

Grato pela atenção.

Att

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  134
  • Tópicos/Dia:  0.02
  • Meu Conteúdo:  1.225
  • Conteúdo/Dia:  0.19
  • Reputação:   2
  • Pontos/Conquistas:  7.399
  • Conteúdo Resolvido:  0
  • Dias Ganho:  1
  • Status:  Offline
  • Dispositivo:  Windows

Oi pessoal, este assunto me interessa muito, pois irei captar o peso da mercadoria em outro banco de dados (nao e RM) e vou tentar gravar na TMOV.

Gostaria saber se é posivel.

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  15
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  548
  • Conteúdo/Dia:  0.09
  • Reputação:   1
  • Pontos/Conquistas:  2.891
  • Conteúdo Resolvido:  0
  • Dias Ganho:  1
  • Status:  Offline
  • Idade:  44

Thiago,

As triggers sempre são disparadas atraves das tabelas INSERTED e DELETED. Essas tabelas são temporárias quando se faz um INSERT, DELETE e UPDATE. Ou seja, no seu caso é no momento quando a TMOV está sendo inserida, nem antes e nem depois, mas no momento e por inteiro.

Caso a Trigger dê pau ele roda um ROLLBACK na tabela que está fazendo o INSERT, por isso você tem a impressão de não estar sendo rodada.

Att,

Att,

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  134
  • Tópicos/Dia:  0.02
  • Meu Conteúdo:  1.225
  • Conteúdo/Dia:  0.19
  • Reputação:   2
  • Pontos/Conquistas:  7.399
  • Conteúdo Resolvido:  0
  • Dias Ganho:  1
  • Status:  Offline
  • Dispositivo:  Windows

Entao,Maffra, gostaria de saber se no meu caso daria certo...

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  885
  • Tópicos/Dia:  0.13
  • Meu Conteúdo:  8.802
  • Conteúdo/Dia:  1.34
  • Reputação:   291
  • Pontos/Conquistas:  106.268
  • Conteúdo Resolvido:  0
  • Dias Ganho:  185
  • Status:  Offline
  • Idade:  51
  • Dispositivo:  Windows

Thiago,

Eu perguntei porque você está iniciando uma transação e sempre 'comita'. Será que não está dando um erro da execução do BEGIN da Trigger e como não trata a exceção da transação o sistema espera o ROLLBACK e não o encontra?

Att,

Se o que falei acima não for o caso, faça o que o Maffra falou... mude pra não comittar direto.

ALTER TRIGGER [dbo].[envia_email]
ON [CorporeRm_Cobaia].[dbo].[TMOV]
AFTER INSERT, UPDATE   ----->Aqui, precisa mesmo de Update também ??? Não seria apenas INSERT ?
AS BEGIN 

DECLARE @TIPOMOV VARCHAR(10)
SET @TIPOMOV = (SELECT CODTMV FROM INSERTED) IF @TIPOMOV = '1.1.01'
BEGIN EXEC msdb.dbo.sp_send_dbmail
		@profile_name = 'Compras',
		@recipients = 'thiago@rmmaringa.com.br',
		@body = 'Teste de E-mail',
		@subject = 'Notificação de Solicitação de Compra';
END

END

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  15
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  548
  • Conteúdo/Dia:  0.09
  • Reputação:   1
  • Pontos/Conquistas:  2.891
  • Conteúdo Resolvido:  0
  • Dias Ganho:  1
  • Status:  Offline
  • Idade:  44

Maurício,

Já existem tópicos relacionados a esse assunto.

./index.php?...=3374&hl=linked

Att,

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  125
  • Tópicos/Dia:  0.02
  • Meu Conteúdo:  458
  • Conteúdo/Dia:  0.07
  • Reputação:   1
  • Pontos/Conquistas:  3.531
  • Conteúdo Resolvido:  0
  • Dias Ganho:  1
  • Status:  Offline
  • Idade:  44

Cara, gostei deste assunto. Porém mesmo com as alterações do Jair esta dando erro na hora de salvar!

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  885
  • Tópicos/Dia:  0.13
  • Meu Conteúdo:  8.802
  • Conteúdo/Dia:  1.34
  • Reputação:   291
  • Pontos/Conquistas:  106.268
  • Conteúdo Resolvido:  0
  • Dias Ganho:  185
  • Status:  Offline
  • Idade:  51
  • Dispositivo:  Windows

Tentam fazer outra operação, pra ver se o problema está no envio do email ou na transação em si o trigger...

Tipo, onde usa a função, poe lá pra gravar um registro numa tabela de teste pra ver se passa sem o erro e o registro é gravado normalmente...

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  134
  • Tópicos/Dia:  0.02
  • Meu Conteúdo:  1.225
  • Conteúdo/Dia:  0.19
  • Reputação:   2
  • Pontos/Conquistas:  7.399
  • Conteúdo Resolvido:  0
  • Dias Ganho:  1
  • Status:  Offline
  • Dispositivo:  Windows

Jair, eu preciso de uma força na minha trigger. Vou inserir um valor no campo PESOBRUTO .ao dar o insert na TMOV. Gostaria de saber se posso filtrar com o proprio IDMOV que esta sendo inserido,se posso fornecer um dado durante a ediçao da TMOV (Ex. dbo.sistematransporte.numconhecimento).

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  15
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  548
  • Conteúdo/Dia:  0.09
  • Reputação:   1
  • Pontos/Conquistas:  2.891
  • Conteúdo Resolvido:  0
  • Dias Ganho:  1
  • Status:  Offline
  • Idade:  44

Pessoal,

Dois assuntos no mesmo tópico???? Eu tô malucoooo....

Vamos separá-los para fluir melhor.

Obrigado,

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  2
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  6
  • Conteúdo/Dia:  0.00
  • Reputação:   0
  • Pontos/Conquistas:  50
  • Conteúdo Resolvido:  0
  • Dias Ganho:  0
  • Status:  Offline

Bom dia pessoal.

Para fechamento do tópico, depois de grandes ajudas, consegui finalmente fazer funcionar. Gostaria de agradecer a todos que contribuiram.

Como o Jair disse desde o principio o problema se resumiu em regra de acesso. Pelo que verifiquei, quando é utilizado o utilitário de envio de email pelo SQL 2005, é criado um procedimento interno na base System Databases/msdb, com isso deve existir o usuário rm (usuário que o sistema acessa o banco), criado nessa base tbém. Bom depois de devidamente criado este usuário, foi preciso rodar um script veja:

EXEC msdb.dbo.sp_addrolemember @rolename = 'DatabaseMailUserRole',

@membername = '<user or role name>' ;

Na parte do script '<user or role name>' informar 'rm'.

Maiores Informações: http://msdn.microsoft.com/en-us/library/ms188719.aspx

Após essas mudanças, parou de dar o erro pelo aplicativo nucleus. Pois realmente como o Jair havia sugerido, quando testei a trigger com um insert qualquer em uma tabela teste ela funcionou, ai o erro estava no envio do e-mail mesmo.

Algumas pessoas perguntaram sobre como proceder neste envio, etc. Bom neste link abaixo, existe um passo a passo para utilizar o utilitário de envio de e-mail pelo SQL 2005. Depois de configurado, ai sim é possivel utilizar a trigger, para disparar o e-mail.

Outro detalhe, neste utilitário de configuração de email, quando é criado um Account name você deve dar previlégio ao usuário rm para envio de e-mail. Acesse o utilitário Database Mail, na opção Manage profile security e dê o acesso.

Espero ter ajudado alguns com dúvidas.

Até mais, e muito obrigado pela atenção de todos.

Thiago Franzoi

thiago@rmmaringa.com.br

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  885
  • Tópicos/Dia:  0.13
  • Meu Conteúdo:  8.802
  • Conteúdo/Dia:  1.34
  • Reputação:   291
  • Pontos/Conquistas:  106.268
  • Conteúdo Resolvido:  0
  • Dias Ganho:  185
  • Status:  Offline
  • Idade:  51
  • Dispositivo:  Windows

Grande Thiago, resolveu e veio aqui postar a solução final, e seus comentários...

E assim que se faz. Desta forma, outros poderão usar a informação que já foi discutida no fórum, com a solução do problema.

Valeu mesmo !!!!

Link para comentar
Compartilhar em outros sites

  • 2 semanas depois...

  • Tópicos Que Criei:  885
  • Tópicos/Dia:  0.13
  • Meu Conteúdo:  8.802
  • Conteúdo/Dia:  1.34
  • Reputação:   291
  • Pontos/Conquistas:  106.268
  • Conteúdo Resolvido:  0
  • Dias Ganho:  185
  • Status:  Offline
  • Idade:  51
  • Dispositivo:  Windows

MOVIDO PARA A ÁREA: Fórum RM > RM Sistemas > [RM] Dúvidas e Suporte

Sua mensagem foi movida para a área correta, pois foi postada em local errado.

Agradecemos o seu post, mas por favor, verifique melhor em qual lugar postar para que as coisas fiquem em ordem por aqui, ok ?

Qualquer problema ou dúvida contate-nos enviando uma PM ( MP - Mensagem Privada ) ou email (se estiver disponível).

Se preferir, faça um post com a sua dúvida ou problema.

Contamos com a sua compreensão e colaboração.

Muito obrigado.

Equipe Fórum RM

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  12
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  88
  • Conteúdo/Dia:  0.01
  • Reputação:   0
  • Pontos/Conquistas:  560
  • Conteúdo Resolvido:  0
  • Dias Ganho:  0
  • Status:  Offline

Muito bom o tópico Thiago, segui o seu roteiro e também consegui enviar um e-mail.

Gostária de tirar uma dúvida sobre o texto do corpo do e-mail, vou posta-lá aqui, caso os moderadores achem que tenho que abrir um novo tópico, eu abro.

A dúvida é a seguinte:

Criei uma stored procedure que envia o e-mail.

Porem o conteúdo do e-mail eu gostaria que fosse o resultado de um select (este select retorna somente 1 coluna porém várias linhas).

Então fiz o seguinte:

Criei uma procedure que efetua um select e o resultado do select coloquei como o corpo do e-mail.

Porem, quando a sentença retorna mais de um resultado apresenta o seguinte erro:

Msg 512, Level 16, State 1, Procedure atesteemail, Line 11

Subquery returned more than 1 value. This is not permitted when the subquery follows =, !=, <, <= , >, >= or when the subquery is used as an expression.

Ou seja a minha subquery não pode ter mais de um resultado. Sendo assim o e-mail vai com o corpo em Branco. Se alguem poder me ajudar a corrigir o erro, segue abaixo a procedure.

set ANSI_NULLS ON

set QUOTED_IDENTIFIER ON

go

-- EXEC ATESTEEMAIL

ALTER PROCEDURE [dbo].[atesteemail] AS

DECLARE

@TEXTOEMAIL VARCHAR(200)

SELECT

@TEXTOEMAIL = (select nome from pfunc where codcoligada = 1 and chapa in ('32310','00002'))

EXEC msdb.dbo.sp_send_dbmail

@profile_name = 'OFICINA',

@recipients = 'mexpaulo@globo.com.br',

@body = @textoemail,

@subject = 'Equipamentos com manutenção vencidas';

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  15
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  548
  • Conteúdo/Dia:  0.09
  • Reputação:   1
  • Pontos/Conquistas:  2.891
  • Conteúdo Resolvido:  0
  • Dias Ganho:  1
  • Status:  Offline
  • Idade:  44

Max Paulo,

Você vai ter que usar um cursor para ir alimentando o seu texto de e-mail.

Foi postado no Forum recentemente pelo Jair como se fazer um cursor com esse objetivo.

Tenta achar esse post e caso não consiga podemos ajudar.

Att,

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  12
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  88
  • Conteúdo/Dia:  0.01
  • Reputação:   0
  • Pontos/Conquistas:  560
  • Conteúdo Resolvido:  0
  • Dias Ganho:  0
  • Status:  Offline

blza Maffra, vou pesquisar no forum e depois retorno o resultado

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  12
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  88
  • Conteúdo/Dia:  0.01
  • Reputação:   0
  • Pontos/Conquistas:  560
  • Conteúdo Resolvido:  0
  • Dias Ganho:  0
  • Status:  Offline

Maffra, não encontrei o tópico mencionado, mas eu uso o cursor para gerar um relatório.

Para o objetivo que eu vou utilizar neste momento o cursor não vai resolver, mas valeu pela dica.

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  15
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  548
  • Conteúdo/Dia:  0.09
  • Reputação:   1
  • Pontos/Conquistas:  2.891
  • Conteúdo Resolvido:  0
  • Dias Ganho:  1
  • Status:  Offline
  • Idade:  44

Max,

Pensei em você colocar na variável @TEXTOEMAIL o cursor para sempre ir acrescentando os nomes dos funcionários, exemplo:

Fulano, Ciclano, Beltrano....

Assim vejo a solução com o cursor.

Se acho que não dá certo vamos ver se mais alguém dá outra sugestão.

Att,

Link para comentar
Compartilhar em outros sites


  • Tópicos Que Criei:  12
  • Tópicos/Dia:  0.00
  • Meu Conteúdo:  88
  • Conteúdo/Dia:  0.01
  • Reputação:   0
  • Pontos/Conquistas:  560
  • Conteúdo Resolvido:  0
  • Dias Ganho:  0
  • Status:  Offline

Maffra, coloquei a consulta da pfunc somente como modelo, na verdade o que gostaria de utilizar é uma consulta que mostra os equipamentos que estão com o plano de manutenção vencido, onde em cada linha traz várias informações. O cursor funciona ok, só que a estetica do e-mail fica meio confuso. Gostaria que cada linha da consulta retornasse em uma linha do e-mail.

Obs. Coloquei a sentença usando a pfunc, pois ela é pequena e exemplifica o que preciso, a sentença real é um pouco extensa e na minha opinião ficaria um pouco confusa para analisar a minha solicitação.

Link para comentar
Compartilhar em outros sites

Participe da conversa

Você pode postar agora, e se registrar mais tarde. Se você tiver uma conta, faça o login agora para postar com sua conta.

Visitante
Responder esse tópico

×   Você colou conteúdo com formatação.   Remover formatação

  Only 75 emoji are allowed.

×   Seu link foi automaticamente inserido no corpo do post.   Exibir como um link

×   Seu conteúdo anterior foi restaurado.   Limpar conteúdo do editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Criar Novo...

Informação Importante

Usando este site, você concorda com nossos Termos de Uso e nossa Política de Privacidade.