Précédent   Forum des professionnels en informatique > Bases de données > Firebird > SQL
SQL Forum d'entraide sur le SQL pour Firebird
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 30/07/2004, 21h51   #1
Invité de passage
 
Inscription : juillet 2004
Messages : 4
Détails du profil
Informations forums :
Inscription : juillet 2004
Messages : 4
Points : 2
Points : 2
Par défaut Trigger sur l'enregistrement courant

Voila mon problème (en fait je suis nouveau sur interbase et sql en général)

Dans une application delphi que je suis entrain de concevoir j'utilise interbase et plus particulierement un "TRIGGER after update" pour calculer la moyenne de plusieurs valeurs entrées :

Code :
 new.moy=(new.val1+new.val2)/2 ;
mais apparamment interbase cherche à mettre à jours tous les champs de la table or je ne veux modifier que l'enregistrement courant

Merci pour votre aide
fifi2000ez est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/07/2004, 23h53   #2
Membre Expert
 
Avatar de Barbibulle
 
Frédéric
Inscription : octobre 2002
Messages : 1 722
Détails du profil
Informations personnelles :
Nom : Frédéric
Âge : 42

Informations forums :
Inscription : octobre 2002
Messages : 1 722
Points : 2 025
Points : 2 025
Pourquoi stoquer une valeur calculée ???

Sinon pour vous aider il faudrait nous en dire un peu plus, nous donnez le code de votre trigger par exemple.
Car si vous ne faites que
Code :
new.moy=(new.val1+new.val2)/2;
celà n'affecte que l'enregistrement courrant.
Barbibulle est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/08/2004, 22h20   #3
Invité de passage
 
Inscription : juillet 2004
Messages : 4
Détails du profil
Informations forums :
Inscription : juillet 2004
Messages : 4
Points : 2
Points : 2
En fait je ne veux pas passer par l'événement ONCALCFIELD de delphi car avec une table de 15000 enregistrements c'est assez lourd je voudrais donc faire le calcul dans le serveur plutot et uniquement les valeurs qui ont changé.

Pour ce qui est du code complet du trigger le voici :

Code :
1
2
3
4
5
6
7
 
CREATE TRIGGER TABLE1_AU FOR TABLE1 ACTIVE
AFTER UPDATE POSITION 0
AS
BEGIN
  UPDATE table1 SET new.moy1=(new.NOTE1+new.NOTE2)/2 ;
END
Apres changement des valeurs dans la table j'ai le message d'erreur suivant :
Citation:
too many concurrent executions for the same request
fifi2000ez est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/08/2004, 19h08   #4
Membre Expert
 
Avatar de Barbibulle
 
Frédéric
Inscription : octobre 2002
Messages : 1 722
Détails du profil
Informations personnelles :
Nom : Frédéric
Âge : 42

Informations forums :
Inscription : octobre 2002
Messages : 1 722
Points : 2 025
Points : 2 025
Et donc pourquoi ne pas essayé la correction que je vous ai proposé ?
Citation:
Envoyé par Barbibulle
Code :
new.moy=(new.val1+new.val2)/2;
Barbibulle est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/08/2004, 21h25   #5
Invité de passage
 
Inscription : juillet 2004
Messages : 4
Détails du profil
Informations forums :
Inscription : juillet 2004
Messages : 4
Points : 2
Points : 2
Merci beaucoups barbibulle, C'est bon pour moi le pb est résolu mais il fallait mettre le trigger en BEFORE UPDATE et non pas en AFTER UPDATE.
fifi2000ez est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h43.


 
 
 
 
Partenaires

Hébergement Web