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

Composants VCL Delphi Discussion :

Indy Gestionnaire d'E/S


Sujet :

Composants VCL Delphi

  1. #21
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut

    Implémente l'evènement OnAfterConnect de ton composant IBDatabase ainsi pour recenser ton ou tes events:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    procedure TDM.IBDatabase1AfterConnect(Sender: TObject);
      // Recensement des Events
      with IBEvents1 do
      begin
        Events.Clear;
        Events.Add('new_order');
    //  Events.Add('autre_event');
        Registered := True;
      end;
    Ensuite sur le composant IBEvent, voici un exemple d'implémentation qui se limite à afficher un message:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    procedure TDM.IBEvents1Event(Sender: TObject; const EventName: String;
      EventCount: LongInt; var CancelAlerts: Boolean);
    begin
      ShowMessage(Format('Présence de %d évènement(s) de type %s.',
        [EventCount, EventName]));
    end;
    Voilà.

    @+ Claudius

  2. #22
    Membre averti
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Janvier 2007
    Messages
    1 144
    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 144
    Points : 337
    Points
    337
    Par défaut
    Merci Claudius,

    Ca fonctione, je vais voir ça...

    Merci !

  3. #23
    Membre averti
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Janvier 2007
    Messages
    1 144
    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 144
    Points : 337
    Points
    337
    Par défaut
    Citation Envoyé par Cl@udius Voir le message
    Salut

    Implémente l'evènement OnAfterConnect de ton composant IBDatabase ainsi pour recenser ton ou tes events:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    procedure TDM.IBDatabase1AfterConnect(Sender: TObject);
      // Recensement des Events
      with IBEvents1 do
      begin
        Events.Clear;
        Events.Add('new_order');
    //  Events.Add('autre_event');
        Registered := True;
      end;
    Ensuite sur le composant IBEvent, voici un exemple d'implémentation qui se limite à afficher un message:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    procedure TDM.IBEvents1Event(Sender: TObject; const EventName: String;
      EventCount: LongInt; var CancelAlerts: Boolean);
    begin
      ShowMessage(Format('Présence de %d évènement(s) de type %s.',
        [EventCount, EventName]));
    end;
    Voilà.

    @+ Claudius
    Cette methode fonctionne, mais necessite une deconnexion de la bdd, mais ça ne m'arrange pas... existe t'il une autre methode?

    Merci de votre aide !

  4. #24
    Rédacteur
    Avatar de evarisnea
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juin 2005
    Messages
    1 957
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 957
    Points : 4 384
    Points
    4 384
    Par défaut
    comment ça? ça nécessite une déconnexion de la bd? le paramétrage du IBEvents se fait pourtant dans l'évènement AfterConnect du composant IBDatabase.

  5. #25
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Citation Envoyé par jojo86 Voir le message
    Cette methode fonctionne, mais necessite une deconnexion de la bdd, mais ça ne m'arrange pas...


    Citation Envoyé par evarisnea Voir le message
    comment ça? ça nécessite une déconnexion de la bd?
    +1

    Il n'y a absolument aucune obligation d'être déconnecté pour recenser des events. Comment en es-tu arrivé à cette conclusion ?

    @+ Claudius

  6. #26
    Membre averti
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Janvier 2007
    Messages
    1 144
    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 144
    Points : 337
    Points
    337
    Par défaut
    Et bien voici ce que j'ai fait :

    J'ai donc ajouter sur le After Connect de mon IBDatabase ce code ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     with IBEvents1 do
      begin
        Events.Clear;
        Events.Add('new_order');
        Registered := True;
      end;
    end;
    Et ensuite, pour tester ceci j'ai ajouté un TEdit et un bouton sur ma form, avec ce code ci sur le bouton :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    procedure TForm1.Button1Click(Sender: TObject);
    begin
    IBDatabase1.Connected:=true;
    IBTransaction1.Active:=True;
    With IBQuery1 do
    begin
      close;
      sql.Clear;
      sql.Add('Insert into TTT (ID,TTT) Values (Gen_ID(G$_ID,1),'''+Edit1.Text+''');');
      ExecSql;
      end;
    end;
    Voila... et lorsque j'ajoute un enregistrement avec tout ça, je n'ais aucune alerte qui apparait...

    Il faut que je déconecte pour que ça fonctionne...

    Merci de votre aide à tous !

  7. #27
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut

    Simplement parce que tu ne fais pas de commit après l'insertion.
    En fait la validation (le commit) intervient quand tu te déconnectes. (AutoCommit à la fermeture).

    [Edit]
    PS: Pas de commit pas de retour de notification. Logique !
    @+ Claudius

  8. #28
    Rédacteur
    Avatar de evarisnea
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juin 2005
    Messages
    1 957
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 957
    Points : 4 384
    Points
    4 384
    Par défaut
    Citation Envoyé par jojo86 Voir le message
    Voila... et lorsque j'ajoute un enregistrement avec tout ça, je n'ais aucune alerte qui apparait...

    Il faut que je déconecte pour que ça fonctionne...
    explique toi un peu plus. lorsque tu dis qu'il faut que tu te déconnecte pour que ça fonctionne ça veut dire quoi exactement?
    autre chose, ton trigger est il définit pour la table TTT que tu utilises dans ta requête ?

  9. #29
    Membre averti
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Janvier 2007
    Messages
    1 144
    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 144
    Points : 337
    Points
    337
    Par défaut
    Citation Envoyé par evarisnea Voir le message
    explique toi un peu plus. lorsque tu dis qu'il faut que tu te déconnecte pour que ça fonctionne ça veut dire quoi exactement?
    autre chose, ton trigger est il définit pour la table TTT que tu utilises dans ta requête ?
    Lorsque je dit qu'il faut que je déconnecte pour que ça fonctionne, ça veut dir qu'il faut que je connect la bdd ensuite, j'ajoute mon enregistrement, et ensuite je déconnect ma bdd et après la deconnexion, le message apparait.

    Oui le trigger est bien défini pour la table TTT.

    Et comme le dit Cl@udius, je ne fais pas de commit...

    Mais même avec un commit, ça ne fonctionne pas...

    J'active le IBDatabase sur le oncreate de ma form, ainsi que mon IBTransaction, et lorsque je clique sur mon bouton, j'ai ajouté la commande CommitRetaining mais rien ne ce produit...

    Merci !

  10. #30
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Tout d'abord concernant la remarque d'evarisnea au sujet du trigger. Si tu as bien défini un trigger qui appelle le GEN_ID avant insertion, alors cette requête:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sql.Add('Insert into TTT (ID,TTT) Values (Gen_ID(G$_ID,1),'''+Edit1.Text+''');');
    va certainement doubler l'appel au GEN_ID.

    Je verrais plus ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sql.Add('Insert into TTT(TTT) Values (' + QuotedStr(Edit1.Text) + ')');
    Ainsi le champ ID sera renseigné par le trigger, et l'appel au GEN_ID sera unique.

    Ensuite:
    Citation Envoyé par jojo86 Voir le message
    Mais même avec un commit, ça ne fonctionne pas...
    Là cela m'étonne, je viens de faire un test et cela fonctionne correctement. As-tu réellement fais un Commit après l'Insert ?
    D'un autre côté je n'ai pas fait de tests avec un CommitRetaining (d'ailleurs je ne l'utilise jamais).

    Citation Envoyé par jojo86 Voir le message
    ... je déconnect ma bdd et après la deconnexion, le message apparait.
    Tu as certainement relié entre eux ton IBDatabase et IBTransaction avec leurs propriétés DefaultTransaction et DefaultDatabase, et tu as laissé le DefaultAction du IBTransaction à TACommit.
    Donc quand tu te déconnectes de la BDD, la transaction exécute l'action par défaut TACommit et tu reçois l'event.

    @+

  11. #31
    Membre averti
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Janvier 2007
    Messages
    1 144
    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 144
    Points : 337
    Points
    337
    Par défaut
    Rien à faire ça ne fonctionne toujours pas...

    Que puis-je faire??? Reinstaller firebird?

  12. #32
    Rédacteur
    Avatar de evarisnea
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juin 2005
    Messages
    1 957
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 957
    Points : 4 384
    Points
    4 384
    Par défaut
    vraiment étrange
    si possible, poste nous ton projet (sources) et la base de données pour que l'on puisse tester.

  13. #33
    Membre averti
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Janvier 2007
    Messages
    1 144
    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 144
    Points : 337
    Points
    337
    Par défaut
    Oki, donc voici un lien vers un dossier zippé qui contiend mon project, avec mon fichier bdd qui s'appel 'MAFIEU.GDB'.

    J'éspère que vous trouvez quelque chose qui ne vas pas.

    Merci de votre aide.

  14. #34
    Rédacteur
    Avatar de evarisnea
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juin 2005
    Messages
    1 957
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 957
    Points : 4 384
    Points
    4 384
    Par défaut
    Citation Envoyé par jojo86 Voir le message
    J'éspère que vous trouvez quelque chose qui ne vas pas.
    oui:
    la base que tu as postée n'est pas celle à laquelle tu accèdes dans ton projet!
    DatabaseName = '192.168.1.6: D:\testgestionappareil\Bdd\TOTO.GDB'
    or la base que tu as postée se nomme MAFIEU.GDB. avec une table TABLE1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    CREATE TABLE TABLE1 (
        ID    INTEGER NOT NULL,
        TEST  CHAR(30)
    );
    ...
    CREATE OR ALTER TRIGGER TESTMSG FOR TABLE1
    ACTIVE AFTER INSERT POSITION 0
    AS
    begin
    POST_EVENT 'test';
    end
    j'ai donc effectué les modifications suivantes :
    modification de la propriété DatabaseName pour faire référence au fichier joint.
    modification du nom de l'évènement recherché
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      //Events.Add('tt');
      Events.Add('test');
    modification de la requête pour être conforme au schéma de la base utilisée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      //sql.Add('Insert into TTT (TTT) Values ('+QuotedStr(Edit1.Text)+')');
      sql.Add('Insert into TABLE1 (TEST) Values ('+QuotedStr(Edit1.Text)+')');
    voilà, ça fonctionne correctement, sans autre modification. alors re-vérifie bien ton projet.

  15. #35
    Membre averti
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Janvier 2007
    Messages
    1 144
    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 144
    Points : 337
    Points
    337
    Par défaut
    Je n'ai pas envoyé le bon projet, j'en avais fait deux. Voici le bon.

    Donc si tu pouvais revérifier...

    Merci beaucoup de ton aide.

  16. #36
    Rédacteur
    Avatar de evarisnea
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juin 2005
    Messages
    1 957
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 957
    Points : 4 384
    Points
    4 384
    Par défaut
    si tu pouvais aussi revérifier ton projet avec les indications que je t'ai données ...
    ps: inutile de zipper l'exécutable, seules les sources suffisent

  17. #37
    Rédacteur
    Avatar de evarisnea
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juin 2005
    Messages
    1 957
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 957
    Points : 4 384
    Points
    4 384
    Par défaut
    bon voilà:
    ça ne marche pas !
    pourquoi ? parce que la transaction n'est pas validée comme dans le premier exemple que tu as mis en ligne
    alors en ajoutant le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    IBTransaction1.Commit;
    ou
    IBTransaction1.CommitRetaining;
    dans l'évènement OnClick du bouton, ça marche normalement

  18. #38
    Membre averti
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Janvier 2007
    Messages
    1 144
    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 144
    Points : 337
    Points
    337
    Par défaut
    Je dois avoir un soucis avec ma config... même avec un commit ça ne fonctionne pas...

  19. #39
    Rédacteur
    Avatar de evarisnea
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juin 2005
    Messages
    1 957
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 957
    Points : 4 384
    Points
    4 384
    Par défaut
    possible, mais je n'y crois pas trop.
    essaie une dernière chose, recommence les tests à zéro, c'est à dire:
    tu crée une nouvelle bdd, un nouveau projet et tu fais tes tests.

  20. #40
    Membre averti
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Janvier 2007
    Messages
    1 144
    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 144
    Points : 337
    Points
    337
    Par défaut
    Je viens de créer une nouvelle bdd, je viens de refaire un nouveau projet, et...

    Idem...

    Je pense que je vais désinstaller firebird.

Discussions similaires

  1. Indy - email, html et piece jointe
    Par nut62 dans le forum Web & réseau
    Réponses: 3
    Dernier message: 13/12/2002, 10h25
  2. [VB6] Gestionnaire des tache de windows 2000 avec VB6
    Par Argonz dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 12/11/2002, 08h21
  3. Réponses: 3
    Dernier message: 26/07/2002, 23h02
  4. [Kylix] indy sur kylix? pb :-(
    Par NicoLinux dans le forum EDI
    Réponses: 7
    Dernier message: 15/05/2002, 23h32
  5. [Kylix] Runtime error 230 avec INDY
    Par Anonymous dans le forum EDI
    Réponses: 2
    Dernier message: 23/03/2002, 11h51

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