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

 Delphi Discussion :

Comment ajouter et appliquer les mises à jour sur un serveur de base de données en passant par DataSnap ?


Sujet :

Delphi

  1. #1
    Membre du Club
    Homme Profil pro
    Tutulaire d'un Master Academique en Réseaux et Systèmes repartis
    Inscrit en
    Juin 2011
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Tutulaire d'un Master Academique en Réseaux et Systèmes repartis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 227
    Points : 51
    Points
    51
    Par défaut Comment ajouter et appliquer les mises à jour sur un serveur de base de données en passant par DataSnap ?
    Salut tous le monde, je suis entrain de créer une application Multi-device qui gère une base de données à distance en passant par un serveur intermédiaire qui est DataSnap Server et cette base de données est géré par le SGBD SQL Server 2008 R2 Express, je sais comment ajouter mais mon problème est comment j'applique les mises à jours sur le serveur de base de données SQL Server 2008 R2 Express ou comment envoyer les mises à jours effectuées sur la base de données dans le cache de l'application client qui gère la base de données vers SQL Server 2008 R2 Express.

    NB:
    Le serveur de base de données je veux l'utiliser à distance pour cela j'ai crée un Virtual Server (NAT) dans le routeur.

    Merci d'avance pour toute aide ou tentative d'aide

  2. #2
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 455
    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 455
    Points : 24 867
    Points
    24 867
    Par défaut
    La seule fois où j'ai participé à la mise en place de DataSnap c'était dans le cadre d'un remplacement de DCOM
    Donc ma vision est peut-être biaisée.

    Tu as un mode très objet de DataSnap mais cela je ne le connais pas du tout, je crois qu'il est assez proche des objets TRemotable du SOAP
    Je ne connais que le DataSnap via manipulation manuelle du JSON

    Les Applications exposaient une série de fonction COM et c'est DCOM qui se chargeaient de monter le module out-process et d'assurer la communication inter-process
    L'idée a été de supprimer le DCOM par un simple COM et de gérer la communication par DataSnap

    L'application client lance une version locale de l'application distante, qui contient le COM et transforme les requêtes en JSON pour les soumette au client DataSnap,
    Sur le serveur, une version Service Windows de l'application distante est lancé en mode Serveur, cela récupère l'objet JSON et cela génère du SQL qui sont exécutés via DBExpress sur Sybase (ça c'est la DAL)

    Tout ça pour dire que DataSnap n'est qu'un moyen pour assurer la communication, ce qui compte c'est que tu as des données en entrée qui doivent être mis dans la base et éventuellement des données en sortie
    Peu importe c'est du DataSnap, du COM, un WS SOAP, il faut séparer la notion transport de la notion de la couche business et de la couche DAO

    Tu peux très bien faire une application client lourde, avec une IHM qui utilise ta couche business BLL et BEL
    Une fois ta couche BLL/BEL stable, tu pourras l'utiliser via DataSnap qui ne sera qu'une exposition des méthodes



    Le DataSnap en gros ne sert qu'à la couche transport des données c'est à dire la partie TCP/IP + Formatage JSON
    La partie "métier" de transformer la requête client en SQL reste à ta charge de l'application comme cela aurait été fait en COM/DCOM

    Je te conseille d'étudier la notion service WEB REST
    Pense Service, ton serveur doit exposer des méthodes simples et prêtes à l'emploi pour gérer le CRUD presque d'un point de vue métier
    le plus simple pour découper en fonction c'est de faire une fonction par formulaire où l'envoi des données du client contient TOUT le formulaire qui est valider en une seule requête DataSnap se traduisant par une seule transaction pouvant regrouper plusieurs SQL dont l'ensemble forme un tout cohérent de données

    Ce n'est pas éloigné d'un POST d'un formulaire Web
    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

  3. #3
    Membre du Club
    Homme Profil pro
    Tutulaire d'un Master Academique en Réseaux et Systèmes repartis
    Inscrit en
    Juin 2011
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Tutulaire d'un Master Academique en Réseaux et Systèmes repartis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 227
    Points : 51
    Points
    51
    Par défaut
    Merci pour vos conseils, je vais poster mon code source peut être vous pourriez m'aider

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 038
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 038
    Points : 40 943
    Points
    40 943
    Billets dans le blog
    62
    Par défaut
    Bonjour, tout ce que je connais du multi-tiers et de Datasnap est purement théorique, basée sur les interventions de Thierry Laborde lors des DevDuJeudi
    saison 2 épisode 2 et saison 3 épisode 9 malheureusement le site ledevdujeudi ne semble plus accessible (si Thierry passe par là ?) mais les vidéos (longues puisque 4 par journées) sont encore dispo sur Youtube
    à mon avis une mise à jour en directe ne pose pas de soucis
    par contre
    comment envoyer les mises à jours effectuées sur la base de données dans le cache de l'application client qui gère la base de données ?
    il me semble que T.Laborde a abordé le sujet mais cela va aussi dépendre de quels composants sont utilisés pour se connecter à la BDD sur le client
    de mes lectures, et mes souvenirs qui commencent à dater, c'est possible
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  5. #5
    Membre du Club
    Homme Profil pro
    Tutulaire d'un Master Academique en Réseaux et Systèmes repartis
    Inscrit en
    Juin 2011
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Tutulaire d'un Master Academique en Réseaux et Systèmes repartis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 227
    Points : 51
    Points
    51
    Par défaut
    Voila la vidéo tutoriel que j'ai suivi pour faire une application de base de données multi-device


    Mais malheureusement cette vidéo montre juste comment afficher les données d'une table alors j'ai fais un petit effort pour ajouter les opérations d'insertion, modification et suppression mais j'ai pas réussi à appliquer les mises à jour dans la base de données.

    J'ai pas fait totalement comme la vidéo parce que j'ai changé le serveur de base de données, j'ai utilisé Microsoft SQL Server Express 2008 R2.


    Voila le code que j'ai fait pour l'ajout :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    procedure TForm2.Button1Click(Sender: TObject);
    begin
    try
    clientdataset1.Open;
    Clientdataset1.Append;
    clientdataset1['a']:='5';
    clientdataset1['d']:='6';
    if ClientDataSet1.State in [dsInsert,dsEdit] then
    ClientDataSet1.Post;
    ClientDataSet1.ApplyUpdates(-1);
    ClientDataSet1.Close();
    ClientDataSet1.Open();
    except
    showmessage('erreur');
    end;
    end;

  6. #6
    Membre éclairé
    Avatar de FOCUS77
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2014
    Messages
    336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2014
    Messages : 336
    Points : 680
    Points
    680
    Par défaut
    Bonjour à tous

    Essayez ce code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    procedure TForm2.Button1Click(Sender: TObject);
    begin
    try
    Clientdataset1.Append;
    clientdataset1.FieldValues['a']:='5';
    clientdataset1.FieldValues['d']:='6';
    ClientDataSet1.ApplyUpdates(-1);
    except
    showmessage('erreur');
    end;
    end;

  7. #7
    Membre du Club
    Homme Profil pro
    Tutulaire d'un Master Academique en Réseaux et Systèmes repartis
    Inscrit en
    Juin 2011
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Tutulaire d'un Master Academique en Réseaux et Systèmes repartis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 227
    Points : 51
    Points
    51
    Par défaut
    Citation Envoyé par FOCUS77 Voir le message
    Bonjour à tous

    Essayez ce code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    procedure TForm2.Button1Click(Sender: TObject);
    begin
    try
    Clientdataset1.Append;
    clientdataset1.FieldValues['a']:='5';
    clientdataset1.FieldValues['d']:='6';
    ClientDataSet1.ApplyUpdates(-1);
    ClientDataSet1.CommitRetaining
    except
    showmessage('erreur');
    end;
    end;
    Mais quelle unité je dois déclaré parce que j'ai cherché dans le manuel d'aide j'ai trouver que la procédure CommitRetaining appartient à l'unité FireDAC.Comp.Client je l'ai ajouté et ça se compile pas puise qu'il ne connait pas encore CommitRetaining ! en plus de ça ClientDataSet n'a pas cette méthode !

  8. #8
    Membre éclairé
    Avatar de FOCUS77
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2014
    Messages
    336
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2014
    Messages : 336
    Points : 680
    Points
    680
    Par défaut
    Bonsoir!

    Je m'excuse d'avoir poster une erreur:
    ClientDataSet1.CommitRetaining
    au lieu de:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Transaction.CommitRetaining;
    ou:
    Cependant je crois que ces codes ne peuvent être appliquer que pour les applications niveau 2
    mais pas pour les applications multiniveaux!

    merci

  9. #9
    Membre du Club
    Homme Profil pro
    Tutulaire d'un Master Academique en Réseaux et Systèmes repartis
    Inscrit en
    Juin 2011
    Messages
    227
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Tutulaire d'un Master Academique en Réseaux et Systèmes repartis
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 227
    Points : 51
    Points
    51
    Par défaut
    Merci FOCUS77 mais ça ne va pas marcher puisque moi j'utilise dbExpress pas FireDac essaye de voir la vidéo tutoriel tu vas comprendre.

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

Discussions similaires

  1. 2 services manquants, bloquant les mises à jour, sur XP
    Par cramnorg dans le forum Windows XP
    Réponses: 1
    Dernier message: 24/11/2013, 19h54
  2. mise à jour sur un serveur lié - transaction distribuée
    Par grome dans le forum Administration
    Réponses: 4
    Dernier message: 27/11/2008, 09h52
  3. Mise à jour de JTable depuis une Base de Données.
    Par hmd01 dans le forum Composants
    Réponses: 3
    Dernier message: 13/03/2007, 16h51
  4. Réponses: 13
    Dernier message: 27/11/2006, 11h17
  5. Comment utiliser outlook où les mails restent sur le serveur
    Par jean christophe dans le forum Outlook
    Réponses: 17
    Dernier message: 06/05/2005, 20h00

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