|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 |
![]() ![]() Evaris NGOUZOIngénieur intégration Inscription : juin 2005 Messages : 1 958 ![]() |
![]() 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
__________________
[D2010] Connexion à Firebird via dbExpress Guide du développeur delphi devant un problème
|
|
|
10
|
|
|
#2 |
|
Membre du Club
![]() Inscription : février 2005 Messages : 151 ![]() |
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
__________________
Remplacer Outlook :Agenda planning réseau Apprenez l'OpenLaszlo LaszloDev.fr : Pleins de tutoriaux Openlaszlo |
|
|
00
|
|
|
#3 | ||
![]() ![]() Evaris NGOUZOIngénieur intégration Inscription : juin 2005 Messages : 1 958 ![]() |
Citation:
Citation:
à 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.
__________________
[D2010] Connexion à Firebird via dbExpress Guide du développeur delphi devant un problème
|
||
|
|
00
|
|
|
#4 |
|
Membre du Club
![]() Inscription : février 2005 Messages : 151 ![]() |
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
__________________
Remplacer Outlook :Agenda planning réseau Apprenez l'OpenLaszlo LaszloDev.fr : Pleins de tutoriaux Openlaszlo |
|
|
00
|
|
|
#5 |
![]() ![]() Evaris NGOUZOIngénieur intégration Inscription : juin 2005 Messages : 1 958 ![]() |
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ù.
__________________
[D2010] Connexion à Firebird via dbExpress Guide du développeur delphi devant un problème
|
|
|
00
|
|
|
#6 | ||||||||
|
Membre régulier
![]() |
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 :
Code :
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 :
Code :
__________________
++ khena Rien n'est plus beau q'une clé, Tant qu'on ne sait pas ce qu'elle ouvre. |
||||||||
|
|
00
|
|
|
#7 | |||||||
![]() ![]() Evaris NGOUZOIngénieur intégration Inscription : juin 2005 Messages : 1 958 ![]() |
Citation:
Citation:
pour ce qui est des transactions tu peux les gérer manuellement avec un code de ce genre pour DBX < 4 : Code :
Code :
Citation:
__________________
[D2010] Connexion à Firebird via dbExpress Guide du développeur delphi devant un problème
|
|||||||
|
|
00
|
|
|
#8 | |
|
Expert Confirmé
![]() ![]() Franck SorianoLeader Technique Inscription : juin 2005 Messages : 1 758 ![]() |
Citation:
Si tu as un réseau de mauvaise qualité (genre un marteau piqueur à côté du cable réseau qui vient le parasiter, un WiFi...), il se peut que le client reçoive un message corrompu. Dans ce cas, la corruption est détecté et le message par à la poubelle direct. Ou même, si le client est occupé au moment de recevoir le message, il se peut qu'il parte aux oubliettes. Donc il y a toujours un risque qu'un client ne recoivent pas une notification. Avec un protocole connecté, de type TCP/IP, le client signale au serveur que le message n'est pas arrivé correctement, et lui demande de le réenvoyer. Mais comme il faut gérer les trames d'acquittement, les échanges sont un peu plus lents. A mon avis, l'Udp convient pour un broadcast (avec la fiabilité qui vient avec), mais si on passe à l'étape suivante qui consiste à contacter chaque client individuellement, il vaut mieux le faire en TCP/IP. |
|
|
|
00
|
|
|
#9 |
|
Membre Expert
![]() Inscription : août 2006 Messages : 1 153 ![]() |
Vaudrait peut être mieux passer en architecture 3 tiers dans ces cas là.
|
|
|
00
|
|
|
#10 |
![]() ![]() Evaris NGOUZOIngénieur intégration Inscription : juin 2005 Messages : 1 958 ![]() |
salut chaplin, pourrais-tu développer ?
__________________
[D2010] Connexion à Firebird via dbExpress Guide du développeur delphi devant un problème
|
|
|
00
|
|
|
#11 |
|
Membre émérite
![]() Inscription : avril 2008 Messages : 863 ![]() |
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 |
|
|
00
|
|
|
#12 |
|
Membre Expert
![]() Inscription : août 2006 Messages : 1 153 ![]() |
@evarisnea:
Basculer l'application que tu as réalisé en utilisant Datasnap, c'est à dire passer d'une application client/serveur à une application multi-niveaux. La couche intermédiaire(business) se chargerait de transmettre les événements aux applications clientes, pour déclencher le raffraichissement des données. Il faudrait utiliser un pattern "Observer" de telle sorte que les applications clientes soient au courant des raffraîchissements (ie IBevent) que la couche logique intercepterait de la base de données, qu'elle transmettrait en faisant un broadcast aux applications connectées via datasnap. |
|
|
00
|
|
|
#13 |
|
Invité de passage
![]() Inscription : août 2008 Messages : 2 ![]() |
bonjours
je me permet de vous contacter suis a un petit souci a la lecture de votre cour :"Delphi 2010 : Connexion à FireBird via dbExpress". j ai donc télécharger et installer comme montrer dans le cour FireBird tout cela sans souci arriver a l étape 4 (IV. Création de la base de données et de la table de Contacts) j ouvre cmd et tape la commende indiquer : create database 'c:\dbexpressfirebird\test.fdb'; a ce moment la isql me retourne un message : statement failed, SQLSTATE = 28000 your user name and password are not defined ask your database administrator to set up a firebird login. je suis sous windows 7 avec firebird 2.5 et delphi EX (pas encor u besoin de toucher a delphi) merci d avence |
|
|
00
|
|
|
#14 | |
![]() ![]() Evaris NGOUZOIngénieur intégration Inscription : juin 2005 Messages : 1 958 ![]() |
as-tu essayé ceci ?
Citation:
__________________
[D2010] Connexion à Firebird via dbExpress Guide du développeur delphi devant un problème
|
|
|
|
00
|
|
|
#15 | |||
|
Invité de passage
![]() Inscription : août 2008 Messages : 2 ![]() |
J ai déjà fait différend test:
Citation:
Dans isql J ai aussi ajouter la ligne pour définir le user comme indiquer dans la doc ( http://www.firebirdsql.org/manual/fr...-creating.html ) Citation:
j ai aussi tester Citation:
Unable to open c:\DBExpressFirebird\create_script.sql, du coup je suis en trin de chercher comment ajouter un user et je me demande si il peu y avoir des conflits avec d autre service ou avec la gestion des utilisateurs windows |
|||
|
|
00
|
|
|
#16 | ||
|
Expert Confirmé
![]() ![]() ![]() Philippe MakowskiConsultant spécialité Firebird Inscription : mai 2002 Messages : 2 260 ![]() |
Code :
Code :
c:\>isql -user SYSDBA -password masterkey -i c:\DBExpressFirebird\create_script.sql -m -m2 -q -o monlogpourvoirsitoutvabien.txt
__________________
Philippe Makowski IBPhoenix - Firebird Membre de l'April |
||
|
10
|
|
|
#17 |
|
Membre du Club
![]() Inscription : août 2007 Messages : 145 ![]() |
Bon jour
J'ai une question pour l'exploitation de la base de données Faisons un edit pour la recherche des enregistrements Pouvez vous nous montrer les étapes Merci |
|
|
00
|
|
|
#18 |
![]() ![]() Evaris NGOUZOIngénieur intégration Inscription : juin 2005 Messages : 1 958 ![]() |
pour ma part, je n'ai pas très bien compris ta question.
qu'as-tu essayé ? où bloques-tu ? normalement si tu arrives à connecter proprement ton clientdataset à la source de données, un locate sur le dataset ou un filtre devraient te permettre d'arriver à ce que tu veux ?
__________________
[D2010] Connexion à Firebird via dbExpress Guide du développeur delphi devant un problème
|
|
|
00
|
|
|
#19 | |||
|
Membre du Club
![]() Inscription : août 2007 Messages : 145 ![]() |
Citation:
Suivant le tutoriel la connexion est faite normalement et les données sont affichées sur le DBGRID mais le code edit.change ne donne pas les resultats voulues Code :
|
|||
|
|
00
|
|
|
#20 |
![]() ![]() Evaris NGOUZOIngénieur intégration Inscription : juin 2005 Messages : 1 958 ![]() |
bon déjà actualiser un Query à chaque saisie dans l'edit ce n'est pas le top, faudrait ajouter un délai avec un timer avant l'actualisation.
à vue de nez ce qui manque dans ton code c'est le close/open du clientDataset connecté à la query, après la réouverture de celle ci.
__________________
[D2010] Connexion à Firebird via dbExpress Guide du développeur delphi devant un problème
|
|
|
00
|
Copyright © 2000-2013 - www.developpez.com