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

Connexion aux bases de données Firebird Discussion :

Event sur base de donnée Firebird et programmation delphi


Sujet :

Connexion aux bases de données Firebird

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2004
    Messages : 15
    Points : 10
    Points
    10
    Par défaut Event sur base de donnée Firebird et programmation delphi
    Bonjour,

    J'ai 2 programme qui travaille sur une meme table.
    Le premier remplit la table et le deuxième traite les données de cette table.

    Actuellement, le second programme execute toutes les X secondes une requetes rappatriant les données de la table. Je souhaiterais n'exécuter la requete que lorsqu'un enregistrement a été inséré dans la table.

    1. Cela vous parait il possible?
    2. Qelle manière de procéder me conseilleriez vous?

    Merci d'avance.

  2. #2
    Expert éminent
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 911
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 911
    Points : 6 032
    Points
    6 032
    Par défaut
    Oui, c'est normalement possible:

    1/ si tu utilises les composants IB, il me semble qu'il existe un EventNotifier dans les composants d'administration

    2/ sinon, il y a 1 solution générique qui consiste à faire un COUNT périodique sur la table à surveiller. Si le nb rapporté est <> du count précédent, il faut faire le boulot
    "Il n'y a pas de bonnes réponses à une mauvaise question." (M. Godet)
    -----------------------
    Pensez à cloturer votre sujet - Aucune réponse aux sollicitations techniques par MP
    Usus magister est optimus

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2004
    Messages : 15
    Points : 10
    Points
    10
    Par défaut
    Merci pour la réponse.

    J'ai effectivement un composant à l'affut d'un message de la BD.
    Il s'agit du composant IB_Event ( j'utilise les composants IBObjects ).

    Dans les évènement de ce composant, on a OnError ou OnEventAlert.

    Faut il générer soi meme via un trigger une alerte? ou une alerte est automatiquement génerée à chaque manipulation dans la BD?

    voici le code d'une procédure de test de ce composant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    procedure TTestFm.IB_Events1EventAlert(Sender: TObject;
      AEventName: String; AEventCount: Integer);
    begin
      ShowMessage('Nouvel enregistrement dans table X');
    end;
    Si l'alerte est générée automatiquement par Firebird, comment puis je récuperer le nom de l'Alerte correspondant à une insertion dans une table précise?

    Si l'alerte doit être générée via un trigger, à quoi ressemble le code à écrire? Si vous connaissez un lien sur le sujet, ca m'intéresserais.

    Merci d'avance.

  4. #4
    Expert éminent
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 911
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 911
    Points : 6 032
    Points
    6 032
    Par défaut
    C'est via un trigger ou une PS.

    Si tu as la doc IB, c'est dans EmbeddedSQL

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SET TERM !! ;
    CREATE TRIGGER POST_NEW_ORDER FOR SALES
    ACTIVE
    AFTER INSERT
    POSITION 0
    AS
    BEGIN
    POST_EVENT ’new_order’;
    END
    !!
    SET TERM ; !!
    Note POST_EVENT is a stored procedure and trigger language extension, available only
    within stored procedures and triggers.
    For a complete discussion of writing a trigger or stored procedure as an event alerter, see
    the Data Definition Guide.
    Et voilà ce qu'en dit le DevGuide:
    To use TIBEvents in your application:
    1. Create a trigger or stored procedure on the InterBase server which will post
    an event.
    2. Add a TIBDatabase and a TIBEvents component to your form.
    3. Add the events to the Events list and register them with the event manager.
    4. Write an OnEventAlert event handler for each event.

    Events are passed by triggers or stored procedures only when the transaction under
    which they occur is posted. In addition, InterBase consolidates events before posting
    them. For example, if an InterBase trigger posts 20 x STOCK_LOW events within a
    transaction, when the transaction is committed these will be consolidated into a single
    STOCK_LOW event, and the client will only receive one event notification.
    For more information on events, refer to “Working with Events” in the InterBase 6
    Programmer’s Guide.
    Setting up event alerts
    Double click on the ellipsis button (...) of the Events property add an event to the Events
    list. Each TIBEvents component can handle up to 15 events. If you need to respond to
    more that 15 events use more that one TIBEvents component. If you attempt to add too
    many events at runtime, an exception will be raised.
    To add an event to the Events list use the following code
    TIBEvents.Events.Add( 'STOCK_LOW')
    Writing an event handler
    OnEventAlert is called every time an InterBase event is received by an IBEvents
    component. The EventName variable contains the name of the event that has just been
    received. The EventCount variable contains the number of EventName events that have
    been received since OnEventAlert was last called.
    To cancel interest in any further events, set CancelAlerts to True. If you later decide that
    you want to receive events again, call the QueueEvents method. You cannot call
    RegisterEvents, UnregisterEvents, QueueEvents or CancelEvents from within an
    OnEventAlert event handler.
    OnEventAlert runs as a separate thread to allow for true asynchronous event processing,
    however, the IBEvents component provides synchronization code to ensure that only one
    OnEventAlert event handler executes at any one time.
    "Il n'y a pas de bonnes réponses à une mauvaise question." (M. Godet)
    -----------------------
    Pensez à cloturer votre sujet - Aucune réponse aux sollicitations techniques par MP
    Usus magister est optimus

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2004
    Messages : 15
    Points : 10
    Points
    10
    Par défaut
    Merci, je teste ca

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2004
    Messages : 15
    Points : 10
    Points
    10
    Par défaut
    ca marche, super.
    Merci

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 28/07/2014, 12h33
  2. Comment on connecte un programme Java avec une base de données FireBird?
    Par Gomez dans le forum Connexion aux bases de données
    Réponses: 1
    Dernier message: 16/02/2007, 10h21
  3. Manipulation de XML sur base de données
    Par psyche dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 02/11/2004, 14h07

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