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

Bases de données Delphi Discussion :

Mise à jour en temps réel dbgrid


Sujet :

Bases de données Delphi

  1. #1
    Membre régulier Avatar de chh2008
    Inscrit en
    Mars 2008
    Messages
    129
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mars 2008
    Messages : 129
    Points : 106
    Points
    106
    Par défaut Mise à jour en temps réel dbgrid
    Bonjour,

    Deux utilisateurs qui travaillent simultanément sur la même base de donnée (Firebird, composant ibtable) et font des modifications sur la même table.
    Seulement les modifications de l'un n'apparaissent pas en temps réel chez l'autre (Dans DBGRID) et pour les afficher il est obligé de fermer puis ouvrir la table.
    Comment réaliser ce genre de mécanisme pour une mise à jour en tem réel ?

    Merci d'avance

  2. #2
    Membre expérimenté
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 146
    Points : 1 412
    Points
    1 412
    Par défaut
    Sous Firebird, il faut placer dans les PS ou mieux les TRIGGER (after UPDATE ou INSERT ou DELETE) une fonction POST_EVENT
    qui indique au programme pilote ce qui c'est passé dans la base.

    Ensuite, il faut récupérer cet événement et procéder à ce que tu souhaites (un rafraichissement). Pour DbGrid et les composants liés je ne sais pas, moi j'utilise les composants de IBDA pour lesquels il y a un composants spécifiques "EVENTS" (IBCAlerter) avec un événement OnEVENT que l'on programme comme suit :

    IF Quel_Evenement = 'cas 1' THEN
    Faire_cela...
    ELSE
    Faire_ceci
    la variable Quel_Evenement contient ce que Firebird a envoyé dans le POST_EVENTc.a.d. Evenement
    Merci d'ajouter un sur les tags qui vous ont aidé

  3. #3
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    C'est vrai système d'Alerte d'Interbase qu'a hérité FireBird est vraiment pratique pour cela !
    Je n'ai pas vu d'équivalent du TIBEvents ailleurs ni dans ADO ni dans dans DBExpress... un comble, leur propre couche de composant ne fourni pas tout le support complet dans leur propre SGBD

    Est-ce que d'autres SGBD "Gratuit\OpenSource" possède un tel système ?
    à part Oracle ou SQLServer évidemment (vu leur prix ! ) et son service broker mais sans .NET faut le pondre soit même en WMI ou acheter l'excellent CoreLab\Devart SDAC contenant évidemment TMSServiceBroker)
    Qui propose aussi IBDAC et ODAC

    Sur une application que j'ai maintenu à peine 4 mois (qui fonctionnait sur SQL Server, Oracle et IB), sur chaque page, il y avait un système de feu tricolore, rouge indiquant que le données ont changés, orange qu'il utilisateur avait commencé une modification (et cela verrouillait le bouton "Modifier")
    en cliquant sur le feu rouge, on pouvait rafraichir les données (il y avait une option pour le rendre automatique mais cela perturbait certains utilisateurs)

    EDIT :
    Pense que si tu as beaucoup de clients, les notifications ont un coût et en plus chaque Refresh du DBGrid en ajoute encore un !
    Evite de rafraîchir des listings de millier de ligne ainsi !
    La seule fois où j'ai vu les notifications utilisés cela n'était QUE des les fenêtres de Détail pour éviter l'état de Conciliation lorsque des utilisateurs modifient une même fiche
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  4. #4
    Membre régulier Avatar de chh2008
    Inscrit en
    Mars 2008
    Messages
    129
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mars 2008
    Messages : 129
    Points : 106
    Points
    106
    Par défaut
    je suis d'accord avec toi ShaiLeTroll au sujet du rarfechissemet
    Possible d'avoir un exemple concret (Trigger + mani du composant)
    je n'arrive pas à piger

  5. #5
    Membre expérimenté
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 146
    Points : 1 412
    Points
    1 412
    Par défaut
    Ce type de composant existe aussi avec le UIB (free )

    principe de fonctionnement (donc code à adapter )
    Dans FIREBIRD
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE OR ALTER TRIGGER B_PP_BU0 FOR B_PP
    ACTIVE AFTER UPDATE POSITION 0
    AS
    BEGIN
       POST_EVENT 'Modif Table 1';
    END
    dans DELPHI
    Il faut enregistrer puis activer les messages envoyés par FIREBIRD
    Code pascal : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
                EventsFB.Stop;
                // Ajoute les nouveaux element
                EventsFB.Events.Add('Modif Table 1');
                EventsFB.Events.Add('Modif Table 2');
                EventsFB.Events.Add('Ajout Table 1');
     
                EventsFB.Start;

    puis indiquer l'opération à effectuer à l'envoi de l'événement dans la base

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    PROCEDURE TfData.EventsFBEvent(Sender: TObject; EventName: STRING; EventCount: Integer);
    BEGIN
        IF EventName = 'Modif Table 1' THEN
            // Raffraichir table 1 après modif
       ELSE
           IF EventName = 'Modif Table 2' THEN
              // Raffraichir table 2 après modif
          ELSE
              // Raffraichir table 1 après Ajout
    END;

    voila le principe pour les composants IBDAC (ce doit être similaire pour les autres, j'imagine)
    Merci d'ajouter un sur les tags qui vous ont aidé

  6. #6
    Membre régulier Avatar de chh2008
    Inscrit en
    Mars 2008
    Messages
    129
    Détails du profil
    Informations personnelles :
    Âge : 42

    Informations forums :
    Inscription : Mars 2008
    Messages : 129
    Points : 106
    Points
    106
    Par défaut
    Merci

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 27/09/2014, 11h11
  2. [AJAX] Mise à jour en temps réel
    Par oliopur78 dans le forum AJAX
    Réponses: 1
    Dernier message: 18/12/2013, 12h33
  3. Réponses: 14
    Dernier message: 11/06/2008, 09h21
  4. Mise à jour en temps des réel des données du Data Warehouse
    Par Reskibil dans le forum Microsoft BI
    Réponses: 8
    Dernier message: 27/03/2008, 09h38
  5. Mise à jour en temps réel de la base de données
    Par Clotilde dans le forum Bases de données
    Réponses: 2
    Dernier message: 11/06/2004, 22h09

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