Précédent   Forum des professionnels en informatique > Bases de données > Firebird > Connexion aux bases de données
Connexion aux bases de données Forum d'entraide sur la connectivité Firebird: composants, drivers, transactions, etc.
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 15/03/2006, 14h24   #1
Invité de passage
 
Inscription : octobre 2004
Messages : 15
Détails du profil
Informations forums :
Inscription : octobre 2004
Messages : 15
Points : 3
Points : 3
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.
seb8810 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2006, 14h53   #2
Expert Confirmé Sénior
 
Avatar de qi130
 
Homme Pierre
Ingénieur qualité méthodes
Inscription : mars 2003
Messages : 3 726
Détails du profil
Informations personnelles :
Nom : Homme Pierre
Âge : 51
Localisation : France

Informations professionnelles :
Activité : Ingénieur qualité méthodes
Secteur : Finance

Informations forums :
Inscription : mars 2003
Messages : 3 726
Points : 4 739
Points : 4 739
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
qi130 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2006, 15h42   #3
Invité de passage
 
Inscription : octobre 2004
Messages : 15
Détails du profil
Informations forums :
Inscription : octobre 2004
Messages : 15
Points : 3
Points : 3
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 :
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.
seb8810 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2006, 16h31   #4
Expert Confirmé Sénior
 
Avatar de qi130
 
Homme Pierre
Ingénieur qualité méthodes
Inscription : mars 2003
Messages : 3 726
Détails du profil
Informations personnelles :
Nom : Homme Pierre
Âge : 51
Localisation : France

Informations professionnelles :
Activité : Ingénieur qualité méthodes
Secteur : Finance

Informations forums :
Inscription : mars 2003
Messages : 3 726
Points : 4 739
Points : 4 739
C'est via un trigger ou une PS.

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

Code :
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 ; !!
Citation:
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:
Citation:
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
qi130 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/03/2006, 16h38   #5
Invité de passage
 
Inscription : octobre 2004
Messages : 15
Détails du profil
Informations forums :
Inscription : octobre 2004
Messages : 15
Points : 3
Points : 3
Merci, je teste ca
seb8810 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/03/2006, 17h06   #6
Invité de passage
 
Inscription : octobre 2004
Messages : 15
Détails du profil
Informations forums :
Inscription : octobre 2004
Messages : 15
Points : 3
Points : 3
ca marche, super.
Merci
seb8810 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 11h08.


 
 
 
 
Partenaires

Hébergement Web