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 24/06/2003, 18h59   #1
rgz
Invité de passage
 
Inscription : mars 2003
Messages : 14
Détails du profil
Informations forums :
Inscription : mars 2003
Messages : 14
Points : 3
Points : 3
Envoyer un message via ICQ à rgz Envoyer un message via MSN à rgz Envoyer un message via Yahoo à rgz
Par défaut historique via trigger

bonjour,
J'aimerai gérer une sorte d'historique des accés à ma base de données. J'ai donc créer une table historique(hist_id,hist_text).
Dans le champ texte, j'aimerais pouvoir concaténer toutes les info de la requetes et les coller sous forme de chaine, avec un séparateur quelconque.

Voici le code que j'aimerais faire marcher:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
 
SET term !!
 
CREATE TRIGGER tuuuuub FOR societe
BEFORE INSERT
AS
BEGIN
   INSERT INTO historique (hist_text) VALUES   
   (new.soc_nom+new.soc_tel_stand);
END !!
 
SET term ; !!
Mais
1° - la concaténation ne marche pas avec un "+" ... d'ou le problème

2° - Comment convertir les différents format en chaine ?? (ex: un "int" à concatener avec un "char")


De plus, j'aimerais par la meme occasion, gérer le nom de l'utilisateur ainsi que la date en cours... par exemple :

Code :
1
2
3
4
5
6
7
8
9
10
 
 
CREATE TRIGGER tuuuuub FOR societe
BEFORE INSERT
AS
BEGIN
   INSERT INTO historique (hist_text,hist_user,hist_date) VALUES   
   (new.soc_nom+new.soc_tel_stand+soc_num , 
   le_user, la_date);
END !!
Merci d'avance pour votre aide
rgz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/06/2003, 20h33   #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
1- la concaténation ne se fait pas avec le + mais avec le double pipe : ||
2- Pour convertir des types utilise CAST( Valeur AS TypeDeDonnée)

Pour le nom d'utilisateur je ne sais pas.


Si je comprend bien tu veux faire l'équivallent d'un fichier log. Attention de ne pas trop dégrader les performances.... et ne concatène pas tout tes champs les un contre les autres, pense à les séparer...
Barbibulle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/06/2003, 21h37   #3
rgz
Invité de passage
 
Inscription : mars 2003
Messages : 14
Détails du profil
Informations forums :
Inscription : mars 2003
Messages : 14
Points : 3
Points : 3
Envoyer un message via ICQ à rgz Envoyer un message via MSN à rgz Envoyer un message via Yahoo à rgz
merci barbidulle, ta presence sur ce forump reste incontournable !!!

"Pour le nom d'utilisateur je ne sais pas. " je vais chercher, pas de probleme




Merci encore et @+
rgz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/06/2003, 22h32   #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
Merci du compliment, c'est appréciable...

Pour l' user si tu ne trouves pas tu peux le récupérer un exécutant cette requete dans ton trigger :

Code :
SELECT USER FROM RDB$DATABASE INTO :NomUSER;
Barbibulle est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/06/2003, 18h01   #5
Membre régulier
 
Inscription : avril 2002
Messages : 70
Détails du profil
Informations forums :
Inscription : avril 2002
Messages : 70
Points : 77
Points : 77
Bonjour,

Pour le username, tu peux l'avoir avec TIBDatabase. Dans la propriété params, on doit inscrire le username et le password. Faudrait traité les caractères, mais ça doit être faisable.

Avec cette façon, tu devrais utiliser une procédure stockée en passant le username en paramètre. Je ne suis pas sûr s'il y a un évenement onopen dans TIBDatabase. Si oui, ça serait l'endroit idéal pour ta procédure stockée

Je ne sais pas si de concaténer les dates est la meilleure solution. J'opterais peut-être pour une insertion à chaque connexion d'un utilisateur. Si jamais tu décides de calculer le nombre de fois qu'un tel utilisateur s'est connecté, tu vas être mal pris avec tes dates concaténées

Bonne journée !
Dihap est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/06/2003, 19h04   #6
rgz
Invité de passage
 
Inscription : mars 2003
Messages : 14
Détails du profil
Informations forums :
Inscription : mars 2003
Messages : 14
Points : 3
Points : 3
Envoyer un message via ICQ à rgz Envoyer un message via MSN à rgz Envoyer un message via Yahoo à rgz
Merci à toi Dihap


je devrais m'en sortir
rgz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/06/2003, 19h12   #7
Membre régulier
 
Inscription : avril 2002
Messages : 70
Détails du profil
Informations forums :
Inscription : avril 2002
Messages : 70
Points : 77
Points : 77
Fait plaisir
Dihap 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 10h04.


 
 
 
 
Partenaires

Hébergement Web