IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Delphi Discussion :

Delphi, Firebird et monitoring


Sujet :

Langage Delphi

  1. #41
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 042
    Points : 40 955
    Points
    40 955
    Billets dans le blog
    62
    Par défaut
    Bonjour,
    Citation Envoyé par Just-Soft Voir le message
    le comble c'est que j'ai supprimé les données de la table à plusieurs reprises mais pour le déconnexion ça ne marche toujours pas ?!
    Que veux-tu que je te dise ? coté Firebird on à la même configuration (du moins je pense) j'ai mis ton trigger (quelque peu modifié pour s'adapter à la table de traçage que j'avais créé) et tout me semble correct (que ce soit en utilisant flamerobin, un programme de connexion ou le programme de surveillance.
    le seul truc, logique, est la non indication des évènements, dans le mémo uniquement, du programme de surveillance (connexion et deconnexion) faite par lui-même
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  2. #42
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 304
    Points
    2 304
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    Bonjour,

    Que veux-tu que je te dise ? coté Firebird on à la même configuration (du moins je pense) j'ai mis ton trigger (quelque peu modifié pour s'adapter à la table de traçage que j'avais créé) et tout me semble correct (que ce soit en utilisant flamerobin, un programme de connexion ou le programme de surveillance.
    le seul truc, logique, est la non indication des évènements, dans le mémo uniquement, du programme de surveillance (connexion et deconnexion) faite par lui-même
    Bonjour !

    je viens de trouver l'erreur
    y'avait un blanc de plus dans le mot 'DECONNEXION' !
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    ALTER TABLE TB_INFO_PC ADD CONSTRAINT CHK1_TB_INFO_PC CHECK (CONECT_DECONECT in ('CONNEXION','DECONNEXION'));
    Bon courage ou Bonne Chance (selon le contexte)
    Mon blog sur WordPress

  3. #43
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 304
    Points
    2 304
    Par défaut
    Toujours dans le même sujet. Maintenant je veux avoir le nom de l'utilisateur mais le problème c'est que j'ai ma propre table d'utilisateurs et pas celle du système (choix imposé). J'ai essayé d'avoir le nom de l'utilisateur avec ça mais il me pointe toujours sur le même nom

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    CREATE OR ALTER trigger onconnect
    active on connect position 0
    AS
    declare variable vutilisateur varchar(15);
    begin
       /* extraire le nom de l'utilisateur */
      /* first c'est pour n'avoir qu'un seul enregistrement d'où mon erreur */
      /* puisque avec un select sans first 1 j'aurais une erreur de type multi sélection */
      select first 1 u.nom_utilisateur from tb_utilisateurs u
      into :vutilisateur;
     
      INSERT INTO TB_INFO_PC(PC,UTILISATEUR, DATE_CON,CONECT_DECONECT)
        VALUES(rdb$get_context('SYSTEM', 'CLIENT_ADDRESS'), :vutilisateur, CURRENT_TIMESTAMP, 'CONNEXION');
      POST_EVENT 'CONNEXION_CLIENT';
    end
    Bon courage ou Bonne Chance (selon le contexte)
    Mon blog sur WordPress

  4. #44
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 042
    Points : 40 955
    Points
    40 955
    Billets dans le blog
    62
    Par défaut
    Bonjour
    Citation Envoyé par Just-Soft Voir le message
    Toujours dans le même sujet. Maintenant je veux avoir le nom de l'utilisateur mais le problème c'est que j'ai ma propre table d'utilisateurs et pas celle du système (choix imposé).
    Oui, mais là c'est le chat qui se mord la queue car pour se connecter il faut ouvrir la base et donc l’évènement ONConnect
    J'ai essayé d'avoir le nom de l'utilisateur avec ça mais il me pointe toujours sur le même nom
    Normal avec select first 1 u.nom_utilisateur from tb_utilisateurs u c'est toujours le premier (attention pas le premier selon l'index, mais la première ligne de la table)

    AMHA il faut faire la chose suivante : récupérer juste après la connection la valeur du générateur et modifier par le programme TB_INFO_PC de façon mettre à jour la colonne
    donc tout de suite après la connexion récupérer la valeur de générateur SELECT gen_id(gen_tb_info_pc_id,0) FROM RDB$DATABASE;
    puis
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE TB_INFO_PC SET UTILISATEUR=:Utilisateur WHERE ID=:valeurRecup
    mais dans un environnement multi-utilisateur ..... les chances, même minimes, que 2 utilisateurs se connectent en même temps ne sont pas a écarter !
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  5. #45
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 304
    Points
    2 304
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    AMHA il faut faire la chose suivante : récupérer juste après la connection la valeur du générateur et modifier par le programme TB_INFO_PC de façon mettre à jour la colonne
    donc tout de suite après la connexion récupérer la valeur de générateur SELECT gen_id(gen_tb_info_pc_id,0) FROM RDB$DATABASE;
    puis
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    UPDATE TB_INFO_PC SET UTILISATEUR=:Utilisateur WHERE ID=:valeurRecup
    mais dans un environnement multi-utilisateur ..... les chances, même minimes, que 2 utilisateurs se connectent en même temps ne sont pas a écarter !
    reste une dernière chose ; comment récupérer le nom de l'utilisateur du moment qu'il est dans la table utilisateurs ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    CREATE OR ALTER trigger onconnect
    active on connect position 0
    AS
    declare variable id_gen_connexion bigint;
    declare variable vutilisateur varchar(15);
    begin
      vutilisateur = 'Uknown';
      INSERT INTO TB_INFO_PC(PC,UTILISATEUR, DATE_CON,CONECT_DECONECT)
        VALUES(rdb$get_context('SYSTEM', 'CLIENT_ADDRESS'), :vutilisateur, CURRENT_TIMESTAMP, 'CONNEXION');
     
      SELECT gen_id(gen_tb_info_pc_id,0) FROM RDB$DATABASE
      into :id_gen_connexion;
     
      UPDATE TB_INFO_PC SET UTILISATEUR =:vutilisateur WHERE ID =:id_gen_connexion; // le vutilisateur n'est jamais renseigné !
     
      POST_EVENT 'CONNEXION_CLIENT';
    end
    Bon courage ou Bonne Chance (selon le contexte)
    Mon blog sur WordPress

  6. #46
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 042
    Points : 40 955
    Points
    40 955
    Billets dans le blog
    62
    Par défaut
    J'ai bien indiqué par le programme
    Citation Envoyé par SergioMaster Voir le message
    récupérer juste après la connection la valeur du générateur et modifier par le programme TB_INFO_PC de façon mettre à jour la colonne
    ou alors il y a peut être moyen avec une variable de contexte, mais de toute façon ce sera après connexion donc après l'event et donc pas dans le même trigger
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  7. #47
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 304
    Points
    2 304
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    J'ai bien indiqué par le programme

    ou alors il y a peut être moyen avec une variable de contexte, mais de toute façon ce sera après connexion donc après l'event et donc pas dans le même trigger
    Bonjour

    vraisemblablement je suis en manque d'idées, je ne vois pas comment faire.

    NB : c'est une application multipostes mais le nombre de postes est tjrs <= 3 alors le problème de concurrence d'accès même s'il est posé il n'a qu'une fine possibilité.
    Bon courage ou Bonne Chance (selon le contexte)
    Mon blog sur WordPress

  8. #48
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 042
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 042
    Points : 40 955
    Points
    40 955
    Billets dans le blog
    62
    Par défaut
    Bonjour,
    Citation Envoyé par Just-Soft Voir le message
    vraisemblablement je suis en manque d'idées, je ne vois pas comment faire.
    ça se lit
    la question qui se pose est la suivante : as-tu vraiment besoin de pister le ONCONNECT sur la Base ou la Connection de l'utilisateur à la base, puisque pour accéder à la base de données tu dois ensuite tester la table ?

    envisage la solution suivante : dans le ONCONNECT du trigger tu ajoutes RDB$SET_CONTEXT ('USER_SESSION', 'VALEUR',SELECT GEN_ID(gen_tb_info_pc_id, 0 ) FROM RDB$DATABASEquand tu as vérifié le couple utilisateur/mot de passe et que celui-ci est ok tu exécute alors le SQL suivant dans ton programme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    IBQuery.SQL.Text='UPDATE TB_INFO_PC SET UTILISATEUR =:vutilisateur WHERE ID =RDB$GET_CONTEXT ('USER_SESSION', 'VALEUR');
    //en indiquant en paramètre vUtilisateur la valeur du nom saisi lors du login
    IBQuery.ParamByName('Vutilisateur').asString:=nomsaisi.text; // je sais la syntaxe n'est peut-être pas bonne mais ibquery et moi = 2
    //puis 
    IBQUery.ExecSQL;
    ainsi 1- pas moyen de se tromper d'enregistrement puisque j'utilise la variable de contexte de la session utilisateur
    2- tu peux retrouver les connexions ayant échoué nom+login incorrect
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

+ Répondre à la discussion
Cette discussion est résolue.
Page 3 sur 3 PremièrePremière 123

Discussions similaires

  1. [Delphi - Firebird] Gestion des transactions
    Par Lili21 dans le forum Connexion aux bases de données
    Réponses: 9
    Dernier message: 20/04/2007, 17h34
  2. Delphi, Firebird et Vista
    Par obione dans le forum Bases de données
    Réponses: 1
    Dernier message: 23/09/2006, 18h02
  3. Delphi, Firebird, et requetes longues ...
    Par shikami dans le forum Bases de données
    Réponses: 5
    Dernier message: 23/09/2004, 19h04
  4. Delphi, Firebird, et lenteurs
    Par shikami dans le forum SQL
    Réponses: 2
    Dernier message: 22/09/2004, 18h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo