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

  1. #1
    Membre averti
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    janvier 2007
    Messages
    1 099
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : janvier 2007
    Messages : 1 099
    Points : 315
    Points
    315

    Par défaut Refresh automatique lors d'un insert depuis un autre poste ?

    Bonjour,

    J'envisage de faire une appli qui sera multi-postes.
    Il y aura un serveur de BDD Firebird.

    L'idée, des utilisateurs feront des demandes dans un formulaire de l'application.
    Sur un autre PC, j'utiliserai une transaction de "Reporting" afin d'afficher en temps réel les demandes en cours. Je dois être en mesure de faire un "refresh" automatique des demandes réalisées et/ou, des demandes soldées car si on a traité le besoin, la ligne doit s'effacer.

    Je pourrais bêtement dire à mon appli toutes les 30 secondes de refaire un Select sur ma table, mais je pense qu'il doit y avoir un moyen de capter l'information de manière beaucoup plus précise pour éviter de faire des refresh si rien n'est inséré ou modifié dans la base.

    Je pensais au composant : TFBEventMonitor, c'est une petite clochette, ça me fait penser à une notification. De ce que j'ai compris, cet objet permet de capter des informations issues des triggers de la BDD.

    Est-ce que je suis sur la bonne voie ou existe-t-il un autre moyen ?

    Merci de votre aide,

  2. #2
    Membre confirmé
    Avatar de FOCUS77
    Homme Profil pro
    Développeur informatique
    Inscrit en
    août 2014
    Messages
    332
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : août 2014
    Messages : 332
    Points : 643
    Points
    643

    Par défaut

    Bonjour !

    Voici un exemple qui permis le passage systématique de l'information d'un PC à un autre pour la table 'VENTES':

    1. Abaissement de niveau d'isolement de la transaction:

    il faut d'abord abaisser au plus bas niveau, le niveau d'isolement de la transaction pour permettre
    le passage de l’information d'une transaction à l'autre(et donc d'un PC à l'autre) on copiant :
    isc_tpb_read_committed dans Transaction.Params:

    2. Définition de trigger:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SET TERM ^ ;
    CREATE TRIGGER TRVENTES FOR VENTES ACTIVE
    AFTER INSERT OR UPDATE OR DELETE POSITION 0
    AS 
    BEGIN 
    post_event 'PSVENTES';
    END^
    SET TERM ; ^

    3. Initialisation de FBEventMonitor (déposé dans le Module de Données 'MDT'):

    par défaut 'registered=False'
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure TMDT.DataModuleCreate(Sender: TObject);
     begin 
     MDT.FBEventMonitor1.RegisterEvents ;
     MDT.FBEventMonitor1.Registered:=True ;
     end;
    4. Configuration de 'FBEventMonitor' :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    procedure TMDT.FBEventMonitor1EventAlert(Sender: TObject; EventName: string;
      EventCount: longint; var CancelAlerts: boolean);
    begin  
    if EventName='PSVENTES' then
     VENTES.Refresh 
    end;
    5. Sauvegarde des données:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    procedure TMDT.VentesAfterPost(DataSet: TDataSet);
    begin
      Ventes.ApplyUpdates(-1) ;
      Transaction.CommitRetaining;
    end;

  3. #3
    Membre averti
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    janvier 2007
    Messages
    1 099
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : janvier 2007
    Messages : 1 099
    Points : 315
    Points
    315

    Par défaut

    Super, ça fonctionne, par contre, j'ai ajouté un DBGrid lié à un datasource qui lui même est lié à un TSQLQuery.

    Lorsque je fais MySQLQuery.Refresh, les données de mon dbgrid ne se rafraîchissent pas...
    Aurais-tu une idée?

    Merci !

  4. #4
    Membre confirmé
    Avatar de FOCUS77
    Homme Profil pro
    Développeur informatique
    Inscrit en
    août 2014
    Messages
    332
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : août 2014
    Messages : 332
    Points : 643
    Points
    643

    Par défaut

    Bonsoir;

    personnellement j'ignore la cause !

    peut être ça?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    procedure TMDT.FBEventMonitor1EventAlert(Sender: TObject; EventName: string;
      EventCount: longint; var CancelAlerts: boolean);
    begin  
    if EventName='PSVENTES' then
    begin  VENTES.close ;VENTES.open end;
    end;

  5. #5
    Membre averti
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    janvier 2007
    Messages
    1 099
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : janvier 2007
    Messages : 1 099
    Points : 315
    Points
    315

    Par défaut

    Ok, donc il n'y a rien de choquant à relancer un select * sur la table pour réactualiser les données ? Tu me confirmes que c'est bien la marche à suivre?

  6. #6
    Membre averti
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    janvier 2007
    Messages
    1 099
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : janvier 2007
    Messages : 1 099
    Points : 315
    Points
    315

    Par défaut

    J'ai vraiment un soucis, j'arrive a déclencher l’événement FBEventMonitor1EventAlert, mais impossible de voir apparaître les nouvelles données...
    J'ajoute mes données avec un "Insert into", que j'execute avec TSQLQuery.ExecSql et je fais bien un commitRetaining juste après...

    Est-ce ça le problème ? Dois-je adapter quelque chose ?

    Edit : Pour que ça fonctionne, je dois sur mon formulaire qui porte le FBEventsmonitor, je dois deconnecter ma base de données puis la reconnecter afin de faire un refresh... Est-ce normal?

  7. #7
    Membre averti
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    janvier 2007
    Messages
    1 099
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : janvier 2007
    Messages : 1 099
    Points : 315
    Points
    315

    Par défaut

    Bon finalement j'ai fait une boulette !
    J'avais fait une faute de frappe dans le parametrage du IBTransaction (isc_tpb_read_committed)

    Merci beaucoup de ta réponse très complète, c'est vraiment super, je n'en espérais vraiment pas tant.

    Merci beaucoup de ton aide c'est super !!!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 13/12/2014, 04h52
  2. Maj automatique des textes dans Notepad++ depuis un autre fichier
    Par municipum dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 05/02/2014, 01h11
  3. Réponses: 3
    Dernier message: 09/02/2012, 23h24
  4. webService JSON : problème lors de l'appel depuis un autre site
    Par Pat_AfterMoon dans le forum Services Web
    Réponses: 1
    Dernier message: 22/11/2011, 02h22
  5. Ajout d'un antislash automatiquement lors d'un insert
    Par Freygolow dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 23/12/2008, 10h48

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