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 :

[Tutoriel] Delphi 2010 : Connexion à Firebird via dbExpress


Sujet :

Bases de données Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    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
    Par défaut [Tutoriel] Delphi 2010 : Connexion à Firebird via dbExpress


    Récemment, Embarcadero rendait disponible Delphi 2010 et RAD Studio 2010 avec un lot de nouveautés, dont le support natif de l'excellent SGBD Firebird.
    Fervent adepte de ces derniers, je me suis empressé de faire quelques tests et de vous proposer ce tutoriel :

    Delphi 2010 : Connexion à Firebird via dbExpress

    Vos commentaires et ou questions sont les bienvenus sur ce fil

    A lire aussi :
    Présentation de delphi 2010

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    151
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 151
    Par défaut
    Sympa ce petit tuto

    Je suis en train de passer a Delphi 2010 mon appli. J'utilisais jusqu'a présent les composants Interbase (IBX).
    Ils ne sont plus compatible avec Firebird ?


    Jai aussi apprécié la petite démo du mode déconnecté en passant par le DataSet XML.

    Par contre, il y a un équivalent des IBEvent en utilisant les DB Express?

    Maxime

  3. #3
    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
    Par défaut
    Citation Envoyé par tipiweb Voir le message
    Sympa ce petit tuto

    Je suis en train de passer a Delphi 2010 mon appli. J'utilisais jusqu'a présent les composants Interbase (IBX).
    Ils ne sont plus compatible avec Firebird ?
    en fait, ils n'ont jamais été officiellement compatibles avec Firebird. Ils fonctionnent juste parce que Firebird est issu d'Interbase 6.

    Citation Envoyé par tipiweb Voir le message
    Jai aussi apprécié la petite démo du mode déconnecté en passant par le DataSet XML.


    Citation Envoyé par tipiweb Voir le message
    Par contre, il y a un équivalent des IBEvent en utilisant les DB Express?
    à ma connaissance, non, il n'y en a pas. il faut savoir que les Events sont des spécificités d'Interbase et Firebird, or dbExpress est lui conçu pour fonctionner avec une plusieurs SGBD. je vais tout de même vérifier.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2005
    Messages
    151
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 151
    Par défaut
    Merci bien pour ces précisions evarisnea

    J'utilise les IBEvent pour rafraichir les données seulement si celle-ci ont changé. Lorsque le poste A fait un update sur une table, le poste B reçoit l'ordre de rafrichir les données (via un trigger).


    Connais-tu une astuce pour arriver à ce meme résultat sans faire un rafraichissement toutes les X secondes?


    Si il y a une solution à mettre en place pour arriver à celà, je passe au DbExpress

    Maxime

  5. #5
    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
    Par défaut
    pour l'astuce, oui il y en a une.

    tu utilises un couple TIdUDPServer, TIdUDPClient dans ton application.
    lorsqu'un enregistrement est mis à jour, tu envoie un broadcast avec le client udp avec un message concernant la table et l'opération de mise à jour effectuée (UPDATE, DELETE).
    les autres poste reçoivent le message et effectuent un action selon la mise à jour.

    j'ai vu cela dans un exemple quelque part, je ne me souviens plus où.

  6. #6
    Membre éclairé
    Profil pro
    Chef de projet en SSII
    Inscrit en
    Février 2003
    Messages
    59
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2003
    Messages : 59
    Par défaut
    Merci pour le tutoriel ! Effectivement, depuis le temps qu'on l'attendait, cette connexion Firebird !

    Une petite remarque sur la forme : l'excellente partie sur le mode déconnecté devrait être carrément copié dans la FAQ, car elle est valable pour tout type de connexion (DBX, BDE, IBX, et autres).

    Sur le fond, les DBX semblent assez lourd à gérer, ça fait beaucoup de composants à placer pour un pauvre dbgrid. En plus, je suis assez surpris : où sont les transactions ?




    Je plussois pour le client / serveur UDP, même si ça peut poser certains problèmes avec des pare-feu. Un petit bout de code pourri et pas sécurisé :

    Sur le poste qui doit recevoir la mise à jour, tu poses un IdUDPServer et un IdUdpClient.

    Pour le UdpServeur : il nous servira à recevoir l'ordre de rafraichissement. Deux trucs à configurer : le port et l'évènement OnUdpRead, qui contiendra par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    procedure TFormServeurUdp.IdUDPServerCommUDPRead(
      AThread: TIdUDPListenerThread; AData: TIdBytes;
      ABinding: TIdSocketHandle);
    var s : string;
    begin
     
    s := String(Adata);
     
    if copy(s,1,3) = 'MAJ'
    then begin
           Dataset.close;
           Dataset.open;
           end
    Le idUpdClient nous servira lui à nous identifier en tant que poste en attente de la mise à jour avec le serveur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
         try
            IdUDPClient.send(ip_serveur,port,'JE SUIS PRET A RECEVOIR DES  MISES A JOUR');
         except on e:exception
         do begin
            showmessage('Erreur de connexion au serveur : '+e.message);
            if IdUDPClient.Connected then IdUDPClient.Disconnect;
            end;
         end;



    Et sur le poste qui vient de faire la mise à jour (le poste "serveur"), tu poses un TidUdpClient et un TidUdpServer.

    Le TidUdpServer nous servira à enregistrer la liste des clients qui sont prêt à recevoir des mises à jour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    procedure TFormClientUdp.IdUDPServerUDPRead(
      AThread: TIdUDPListenerThread; AData: TIdBytes;
      ABinding: TIdSocketHandle);
    var s : string;
    begin
     
    s := String(Adata);
     
    if s = 'JE SUIS PRET A RECEVOIR DES  MISES A JOUR'
    then begin
           liste_ip.append(abinding.ip); // ou abinding.peerip, je sais plus
           end
    Le TidUdpClient nous servira à envoyer les mises à jour. Tu configures ton port et, après ton INSERT / UPDATE / DELETE
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    for i := 0 to liste_ip -1
         try
            IdUDPClient.send(liste_ip[i],port,'MAJ');
         except on e:exception
         do begin
            showmessage('Erreur de connexion au serveur : '+e.message);
            if IdUDPClient.Connected then IdUDPClient.Disconnect;
            end;
         end;
    Mais bon ce n'est valable que si tu as un serveur bien défini de mises à jour, et pleins de petits clients. Si tous tes postes peuvent faire des mises à jour et tous doivent se rafraichir, je ne crois pas qu'il y ait de solutions miracles (et la tienne me semble pas mal en fait, je vais p'etre l'utiliser).

  7. #7
    Membre émérite
    Avatar de Montor
    Homme Profil pro
    Autre
    Inscrit en
    Avril 2008
    Messages
    879
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Autre

    Informations forums :
    Inscription : Avril 2008
    Messages : 879
    Par défaut
    Bonjour
    just pour dire il faut travailler en mode deconnectée avec ClientDataSet...si la propriete Filename a ete specifiée le contenu du fichier sera enregister dans le DFM qui va produit une appli volumineuse

Discussions similaires

  1. Erreur lors d'un INSERT sur une table dans Firebird via dbExpress
    Par matou7 dans le forum Bases de données
    Réponses: 4
    Dernier message: 03/04/2012, 16h40
  2. Pb connexion Firebird via Jaybird - Java
    Par sims26 dans le forum Eclipse
    Réponses: 1
    Dernier message: 25/01/2010, 22h12
  3. Connexion à Firebird via SAMBA
    Par JP.NUAGE dans le forum Connexion aux bases de données
    Réponses: 6
    Dernier message: 27/09/2009, 08h54
  4. Connexion Firebird via sdsl
    Par ludo00002 dans le forum Connexion aux bases de données
    Réponses: 19
    Dernier message: 02/07/2008, 17h10

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