Atualizar média

08/11/2008

0

Olá pessoal, estou fazendo uma aplicação e estou com algumas dúvidas...

é o seguinte, eu tenho três tabelas: CANDIDATOS, QUESTOES e PROVA..

na tabela CANDIDATOS tenho um campo chamado media que tem que ser atualizada constantemente quando uma questão é inserida, vou deixar mais claro...

em QUESTOES tenho id pk
peso

e em PROVA tenho id_cand pk fk candidatos
id_questao pk fk questoes
valor_obtido

tenho que multiplicar o valor obtido na questão pelo peso da questão e depois fazer a média do candidato que vai entrar no campo média, que tem que ser atualizado sempre que uma nova questão ou prova for adicionada
estou com muitas dúvidas sobre essa questão, tentei fazer uma trigger,mas não está dando certo, gostaria da opinião de algupem que pudesse me ajudar com isso...

agradeço desde já pela ajuda


--lh-pim--

--lh-pim--

Responder

Posts

09/11/2008

Codename.v

Seu pensamento está corrento quanto ao que fazer amigo... Utilizar triggers! :D

Tente:

CREATE TRIGGER TrgExemplo ON PROVAS
AFTER INSERT
AS
BEGIN

DECLARE @ValorObtido AS FLOAT;
DECLARE @PesoQuestao AS FLOAT;
DECLARE @Media AS FLOAT;

SET @ValorObtido = (SELECT valor_obtido FROM Inserted);
SET @PesoQuestao = (SELECT peso FROM QUESTOES WHERE id = (SELECT id FROM Inserted));

SET @Media = @ValorObtido * @PesoQuestao;

UPDATE CANDIDATOS SET media = @Media WHERE id_cand = (SELECT id_cand FROM Inserted);

END


Esse é um trigger ´after insert´ colocado em sua tabela PROVAS, ou seja, vai ser disparado depois que novos valores forem inseridos na mesma. O valor obtido e o peso da questão serão armazenados nas variáveis @ValorObtido e @PesoQuestao respectivamente. Em seguida a média é calculada e atribuida à variável @Media que por sua vez é utilizada para alterar o campo media do candidato em questão.

Recontrui suas tabelas e testei o trigger... Funciona perfeitamente. Qualquer dúvida entre em contato!

Abraços!


Responder

09/11/2008

--lh-pim--

brilhante amigo, era uma coisa dessas que eu tinha em mente,mas não conseguia desenvolver...

Agora,eu precisava criar essa trigger no Firebird, tem idéia de como eu possa fazer isso??? :?

se puder,agradecerei muito

muito obrigado pela ajuda e também muito obrigado caso possa me ajudar futuramente :wink:


Responder

09/11/2008

--lh-pim--

Olha só, estou passando essa trigger para Firebird,ela ficou assim:


 
           AS
   declare variable ValorObtido float;
   declare variable PesoQuestao float;
   declare variable media float;
BEGIN

   ValorObtido = (SELECT VALOR_OBTIDO FROM inserted);
   PesoQuestao = (SELECT PESO_QUESTAO FROM QUESTOES WHERE ID_QUESTAO = (SELECT ID_QUESTAO FROM inserted));
    
   media = ValorObtido * PesoQuestao;

   UPDATE CANDIDATOS SET media = MEDIA_CAND WHERE ID_CAND = (SELECT ID_CAND FROM inserted);
end


agora ele me retorna o seguinte erro:

Column does not belong to referenced table.
Dynamic SQL Error.
SQL error code = -206.
Subselect illegal in this context.

não estou entendendo muito bem... :?

se puder me ajudar, agradeço desde já[/code]


Responder

10/11/2008

Codename.v

Poste os códigos e sua respectiva mensagem de erro na seção dedicada ao banco de dados Firebird deste fórum. Talvez alguém saiba como lhe ajudar. :D

Abraços!


Responder

11/11/2008

Emerson Nascimento

tente assim:
AS
   declare variable ValorObtido float;
   declare variable PesoQuestao float;
   declare variable media float;
BEGIN

   ValorObtido := inserted.VALOR_OBTIDO;

   SELECT PESO_QUESTAO FROM QUESTOES WHERE ID_QUESTAO = inserted.ID_QUESTAO into :PesoQuestao;
    
   media = ValorObtido * PesoQuestao;

   UPDATE CANDIDATOS SET MEDIA_CAND = :media WHERE ID_CAND = inserted.ID_CAND;
end



Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar