Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
Bonjour !
je dois faire un fichier log pour faire un historique de mon application est ce que quelqu'un aurais un exemple de comment il est créer ?
merci beaucoup
Dernière modification par matthieub (12-06-2009 09:09:32)
Hors ligne
message de modération
1) un "bonjour" serait du meilleur effet dans un message
2) la multiplication des "?" dans le titre du message ne garantit pas une réponse plus rapide...
en ce qui concerne la question, regarde du côté des fonctions sur les fichiers (FileOpen, FileWrite, FileClose)
Hors ligne
salut
quel est le but de ce fichier ?
si c'est pour avoir un suivi des modifications des sources de ton aplli il y a des gestionnaires de sources
si c'est pour un suivi des modification BDD il serait plus judicieux de le faire niveau BDD
Hors ligne
merci, je vais essayer en passant par une table qui reprendrai l'historique (connexions, modifications).
Hors ligne
bonjour,
j'ai créé une table dans laquelle je veux mettre l'historique des modifications et des connexions fait par les utilisateurs, pouvez vous me dire ou me montrer un exemple permettant que chaque fois que mon utilisateur se connecte sa va l'inscrire dans la table''d'historique''. Je ne sais pas comment faire pour qu'elle se remplisse a chaque connexion et modification.
Si vous connaissez des evenements ou fonctions permettant cela, je suis de toute ouie!
merci
Hors ligne
tu codes une mise à jour de ta table lors de l'update de tes datawindow ou lors des embedded sql de ton application ...
Hors ligne
en fet je dois créer un historique pour un administrateur systeme qui lui permet de voir les connexions faites par l'utilisateur .et les modifications qu'il a fait par rapport au temps (datetime systeme). je suis perdu parce je n'en ai jamais fait ce travail je pensais d'abord passer par des fichier logs mais trop peu sécuriser. Donc j'ai opter par l'affichage des informations dans dw , en créant une table qui reprend les caractéristique de mes utilisateur et de mes dossiers.Mais je ne sais pas comment et quoi utiliser pour y arriver.
Alors je suis de toute ouie a toutes informations.
Hors ligne
POur moi à chaque modification ou connexion de l'utilisateur j'aimerai que sa complete la table "historique".voila:/
Hors ligne
Bonjour,
Je ne connais pas le but de ce stockage.
Pour ma part, je travaille avec Oracle et j'utilise les Triggers pour stocker au niveau de chaque table l'utilisateur qui a créé la ligne avec sa date de création, et l'utilisateur qui à modifié la ligne avec la date de modification.
Evidemment, seul le dernier à modifier est conservé.
J'ai également une table d'alerte qui stocke toute modification importante.Je travaille sur un logiciel qui gère des données sur des animaux donc j'insere une alerte pour chaque suppression d'animal avec la date de la suppression, l'utilisateur qui a fait la suppression ,le numéro de l'animal supprimé ... mais aussi lorsque des infos importante sont modifiés (je stoque les ancienne valeurs)
Ici, le but est plus un flicage
Hors ligne
Je travaille sous sybase je vais essayer de me diriger vers cette horizon,mais tu saurais me montrer comment tu as créer ton trigger ?
Hors ligne
Je peux te donner une syntaxe pour oracle car je ne travaille pas avec une base Sybase.
En fait, sur chaque table, j'ai crée 4 colonnes pour stocker l'utilisateur qui a inséré la ligne ( XXX_UTIL_CREER), la date de l'insertion ( XXX_DATE_CREER ), l'utilisateur qui a modifié la ligne ( XXX_UTIL_MODIF ) et la date de modification (XXX_DATE_MODIF )
CREATE TRIGGER TRG_Animaux BEFORE INSERT OR UPDATE ON Animaux FOR EACH ROW BEGIN IF INSERTING THEN IF :new.Ani_util_creer IS NULL THEN :new.Ani_util_creer := User; END IF; IF :new.ani_date_creer IS NULL THEN :new.ani_date_creer := TO_DATE(SYSDATE); END IF; END IF; IF UPDATING THEN :new.Ani_util_modif := User; :new.ani_date_modif := TO_DATE(SYSDATE); END IF; END; /
Hors ligne
merci beaucoup je vais regarder à ça tout de suite
Hors ligne
il te faut des trigger des connections
voici le code
create table audit_connection ( connection_DATEON date, connection_DATEOFF date, connection_TIME Number, connection_user varchar2(30), connection_osuser varchar2(30), connection_machine varchar2(64), connection_terminal varchar2(16), connection_PROTOCOL varchar2(30), connection_ADDRESS varchar2(30), connection_program varchar2(64), connection_MODULE varchar2(48), connection_NB Number, connection_SID_SERIAL# varchar2(30)) TABLESPACE XXXXXXXX;
CREATE OR REPLACE PROCEDURE SYS.P_CONNECTIONON IS N_NUMBER NUMBER(10); V_MACHINE1 VARCHAR2(50); V_MACHINE2 VARCHAR2(50); v_program1 Varchar2(50); v_program2 Varchar2(50); FOUND BOOLEAN; V_LBPARAM VARCHAR2(1024); V_CONNECTION_SID_SERIAL# AUDIT_CONNECTION.CONNECTION_SID_SERIAL#%TYPE; V_CONNECTION_USER AUDIT_CONNECTION.CONNECTION_USER%TYPE; V_CONNECTION_OSUSER AUDIT_CONNECTION.CONNECTION_OSUSER%TYPE; V_CONNECTION_MACHINE AUDIT_CONNECTION.CONNECTION_MACHINE%TYPE; V_CONNECTION_TERMINAL AUDIT_CONNECTION.CONNECTION_TERMINAL%TYPE; V_CONNECTION_PROTOCOL AUDIT_CONNECTION.CONNECTION_PROTOCOL%TYPE; V_CONNECTION_ADDRESS AUDIT_CONNECTION.CONNECTION_ADDRESS%TYPE; V_CONNECTION_PROGRAM AUDIT_CONNECTION.CONNECTION_PROGRAM%TYPE; V_CONNECTION_PROGRAM2 AUDIT_CONNECTION.CONNECTION_PROGRAM%TYPE; V_CONNECTION_MODULE AUDIT_CONNECTION.CONNECTION_MODULE%TYPE; V_CONNECTION_SID_SERIAL#2 AUDIT_CONNECTION.CONNECTION_SID_SERIAL#%TYPE; CURSOR C1(VAR_MACHINE VARCHAR2) IS SELECT DISTINCT (MACHINE) FROM V$SESSION WHERE UPPER(USERNAME) = UPPER(USER) AND MACHINE <> VAR_MACHINE; CURSOR C12(VAR_MACHINE VARCHAR2) IS SELECT DISTINCT MACHINE, UPPER(PROGRAM) FROM V$SESSION WHERE UPPER(USERNAME) = UPPER(USER) AND ( MACHINE <> VAR_MACHINE and UPPER(PROGRAM) = V_CONNECTION_PROGRAM ); CURSOR C2 IS SELECT TO_CHAR(SID)||':'||TO_CHAR(SERIAL#), UPPER(SYS_CONTEXT('USERENV','SESSION_USER')), UPPER(SYS_CONTEXT('USERENV','OS_USER')), UPPER(SYS_CONTEXT('USERENV','HOST')), UPPER(SYS_CONTEXT('USERENV','TERMINAL')), UPPER(SYS_CONTEXT('USERENV','NETWORK_PROTOCOL')), UPPER(SYS_CONTEXT('USERENV','IP_ADDRESS')), UPPER(PROGRAM), LTRIM(MODULE) FROM V$SESSION WHERE UPPER(USERNAME) = UPPER(USER) AND AUDSID = SYS_CONTEXT('USERENV','SESSIONID') AND AUDSID > 0 ; CURSOR C3 IS SELECT CONNECTION_SID_SERIAL# FROM PL.AUDIT_CONNECTION WHERE CONNECTION_SID_SERIAL# <> '£' AND CONNECTION_SID_SERIAL# NOT IN ( SELECT TO_CHAR(SID)||':'||TO_CHAR(SERIAL#) FROM V$SESSION); CURSOR C4 IS SELECT NVL(CONNECTION_SID_SERIAL#,'£') FROM AUDIT_CONNECTION WHERE CONNECTION_DATEON <= SYSDATE AND TO_CHAR(CONNECTION_DATEON,'DD/MM/YYYY') = TO_CHAR(SYSDATE,'DD/MM/YYYY') AND CONNECTION_USER = V_CONNECTION_USER AND CONNECTION_OSUSER = V_CONNECTION_OSUSER AND CONNECTION_MACHINE = V_CONNECTION_MACHINE AND CONNECTION_TERMINAL = V_CONNECTION_TERMINAL AND CONNECTION_PROTOCOL = V_CONNECTION_PROTOCOL AND CONNECTION_ADDRESS = V_CONNECTION_ADDRESS AND CONNECTION_PROGRAM = V_CONNECTION_PROGRAM ; -- Cursor C5(var_PROGRAM Varchar2) is -- Select Distinct PROGRAM -- from v$session -- where upper(username) = upper(user) and -- upper(PROGRAM) <> upper(var_PROGRAM) and -- PROGRAM is not null; BEGIN OPEN C3; FETCH C3 INTO V_CONNECTION_SID_SERIAL#; FOUND := C3%FOUND; WHILE FOUND LOOP UPDATE PL.AUDIT_CONNECTION SET CONNECTION_SID_SERIAL#= NULL, CONNECTION_DATEOFF = SYSDATE, CONNECTION_NB = NVL(CONNECTION_NB,0) + 1, CONNECTION_TIME = NVL(CONNECTION_TIME,0) + (SYSDATE - CONNECTION_DATEON)*24*60*60 WHERE CONNECTION_SID_SERIAL#= V_CONNECTION_SID_SERIAL#; FETCH C3 INTO V_CONNECTION_SID_SERIAL#; FOUND := C3%FOUND; END LOOP; CLOSE C3; OPEN C2; FETCH C2 INTO V_CONNECTION_SID_SERIAL#, V_CONNECTION_USER, V_CONNECTION_OSUSER, V_CONNECTION_MACHINE, V_CONNECTION_TERMINAL, V_CONNECTION_PROTOCOL, V_CONNECTION_ADDRESS, V_CONNECTION_PROGRAM,V_CONNECTION_MODULE; FOUND := C2%FOUND; CLOSE C2; IF FOUND THEN OPEN C4; FETCH C4 INTO V_CONNECTION_SID_SERIAL#2; FOUND := C4%FOUND; CLOSE C4; IF NOT FOUND THEN INSERT INTO PL.AUDIT_CONNECTION ( CONNECTION_SID_SERIAL#,CONNECTION_DATEON,CONNECTION_USER, CONNECTION_OSUSER,CONNECTION_MACHINE, CONNECTION_TERMINAL, CONNECTION_PROTOCOL, CONNECTION_ADDRESS, CONNECTION_PROGRAM, CONNECTION_MODULE) VALUES ( V_CONNECTION_SID_SERIAL#,SYSDATE, V_CONNECTION_USER,V_CONNECTION_OSUSER,V_CONNECTION_MACHINE, V_CONNECTION_TERMINAL, V_CONNECTION_PROTOCOL, V_CONNECTION_ADDRESS, V_CONNECTION_PROGRAM, V_CONNECTION_MODULE); ELSE IF V_CONNECTION_SID_SERIAL#2 ='£' THEN UPDATE AUDIT_CONNECTION SET CONNECTION_SID_SERIAL# = V_CONNECTION_SID_SERIAL# WHERE TO_CHAR(CONNECTION_DATEON,'DD/MM/YYYY') = TO_CHAR(SYSDATE,'DD/MM/YYYY') AND CONNECTION_USER = V_CONNECTION_USER AND CONNECTION_OSUSER = V_CONNECTION_OSUSER AND CONNECTION_MACHINE = V_CONNECTION_MACHINE AND CONNECTION_TERMINAL = V_CONNECTION_TERMINAL AND CONNECTION_PROTOCOL = V_CONNECTION_PROTOCOL AND CONNECTION_ADDRESS = V_CONNECTION_ADDRESS AND CONNECTION_PROGRAM = V_CONNECTION_PROGRAM ; END IF; END IF; END IF; SELECT COUNT (1) INTO N_NUMBER FROM G_USER WHERE UPPER(USERNAME) = UPPER(USER) ; IF N_NUMBER > 0 Then IF USER <> 'ADMINISTRATEUR' THEN -- autorisation connection sur meme application [b]recuperation de si l'utilisateur a le droit d'ouvrir plusieur session : n_number[/b] IF n_number = 0 Then Select count(distinct USERNAME||UPPER(PROGRAM)||PROCESS) into n_number from v$session where upper(username) = upper(user) and Upper(PROGRAM) = V_CONNECTION_PROGRAM; If n_number > 1 Then -- V_LBPARAM := 'Vous êtes déjà connecté sur l''aplication '''; -- IF NVL(V_CONNECTION_PROGRAM,'£') = '£' Then -- Open C5(V_CONNECTION_PROGRAM); -- Fetch C5 into V_CONNECTION_PROGRAM2; -- Found := C5%FOUND; -- Close C5; -- IF FOUND THEN V_LBPARAM := V_LBPARAM||V_CONNECTION_PROGRAM||''' !'; RAISE_APPLICATION_ERROR (-20200, V_LBPARAM); -- END IF; -- End If; End If; End if; -- autorisation connection sur meme poste [b]Recuperer V_LBPARAM[/b] IF V_LBPARAM = 'N' THEN SELECT COUNT(DISTINCT USERNAME||MACHINE) INTO N_NUMBER FROM V$SESSION WHERE UPPER(USERNAME) = UPPER(USER) AND UPPER(USERNAME) <> 'PL' and UPPER(USERNAME) <> 'ADMINISTRATEUR'; IF N_NUMBER > 1 THEN SELECT SYS_CONTEXT('USERENV','HOST') INTO V_MACHINE1 FROM DUAL; V_LBPARAM := 'Vous êtes déjà connecté sur le poste '''; IF V_MACHINE1 IS NOT NULL THEN -- IF NVL(V_CONNECTION_PROGRAM,'£') = '£' Then -- OPEN C1(V_MACHINE1); -- FETCH C1 INTO V_MACHINE2; -- FOUND := C1%FOUND; -- CLOSE C1; -- ELSE OPEN C12(V_MACHINE1); FETCH C12 INTO V_MACHINE2, V_CONNECTION_PROGRAM2; FOUND := C12%FOUND; CLOSE C12; -- END IF; IF FOUND THEN V_LBPARAM := V_LBPARAM||V_MACHINE2||''' !'; RAISE_APPLICATION_ERROR (-20200, V_LBPARAM); END IF; END IF; END IF; END IF; END IF; END IF; END; /
Create or replace Procedure SYS.P_CONNECTIONOFF Is found Boolean; v_connection_SID_SERIAL# audit_connection.connection_SID_SERIAL#%TYPE; v_connection_module audit_connection.connection_module%TYPE; v_LOGON_TIME date; Cursor C1 is Select connection_SID_SERIAL# from audit_connection where connection_SID_SERIAL# = v_connection_SID_SERIAL#; Cursor C3 is Select connection_SID_SERIAL# from audit_connection where connection_SID_SERIAL# <> '£' and connection_SID_SERIAL# not in ( Select to_char(SID)||':'||to_char(SERIAL#) from v$session); Cursor C2 is Select to_char(SID)||':'||to_char(SERIAL#), nvl(module,'£'), LOGON_TIME from v$session where upper(username) = upper(user) and AUDSID = SYS_CONTEXT('USERENV','SESSIONID') and AUDSID > 0 ; BEGIN Open C3; Fetch C3 into v_connection_SID_SERIAL#; Found := C3%FOUND; While Found Loop Update audit_connection set connection_SID_SERIAL#= NULL, connection_dateOFF = SYSDATE, connection_NB = nvl(connection_NB,0) + 1, connection_TIME = nvl(connection_TIME,0) + (SYSDATE - connection_dateON)*24*60*60 WHERE connection_SID_SERIAL#= v_connection_SID_SERIAL#; Fetch C3 into v_connection_SID_SERIAL#; Found := C3%FOUND; end loop; close C3; Open C2; Fetch C2 into v_connection_SID_SERIAL#, v_connection_module, v_LOGON_TIME; Found := C2%FOUND; Close C2; If Found Then Open C1; Fetch C1 into v_connection_SID_SERIAL#; Found := C1%FOUND; Close C1; If Found Then If v_connection_module <> '£' Then Update audit_connection set connection_SID_SERIAL#= '£', connection_dateOFF = SYSDATE, connection_NB = nvl(connection_NB,0) + 1, connection_TIME = trunc(nvl(connection_TIME,0) + (SYSDATE - nvl(v_LOGON_TIME,SYSDATE))*24*60*60,0), connection_module = v_connection_module WHERE connection_SID_SERIAL#= v_connection_SID_SERIAL#; Else Update audit_connection set connection_SID_SERIAL#= '£', connection_dateOFF = SYSDATE, connection_NB = nvl(connection_NB,0) + 1, connection_TIME = trunc(nvl(connection_TIME,0) + (SYSDATE - nvl(v_LOGON_TIME,SYSDATE))*24*60*60,0) WHERE connection_SID_SERIAL#= v_connection_SID_SERIAL#; End if; End if; End if; END;
CREATE OR REPLACE TRIGGER SYS.CONNECTIONOFF BEFORE LOGOFF ON DATABASE BEGIN SYS.P_CONNECTIONOFF; END;
CREATE OR REPLACE TRIGGER SYS.CONNECTIONON AFTER LOGON ON DATABASE DECLARE BEGIN SYS.P_CONNECTIONON; END;
Hors ligne
Merci Enormement pour l'aide, je vais suivre tes conseils.
Encore un grand merci et bonne journée
Hors ligne
bonjour,
dans le cas d'un fichier log vous auriez un exemple parce je serai prochainement confronté à la création de ce type de fichier, mais je ne sais pas bien comment le completer merci
Hors ligne
Finalement, c'est une table d'historique des connexions et des modifications que tu veux faire ou remplir un fichier texte avec ces informations ?
Hors ligne
va voir à Fileopen(), Fileread(), Filewrite() ...
Hors ligne
non,non via une table
Hors ligne
bhe alors, pourquoi t'intéressé aux fichiers .log ?
Dernière modification par BRWA (11-06-2009 09:34:04)
Hors ligne