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

Langage Delphi Discussion :

Client/Serveur avec DataSnap par un Novice


Sujet :

Langage Delphi

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 46
    Points : 50
    Points
    50
    Par défaut Client/Serveur avec DataSnap par un Novice
    Bonjour à tous

    J'ai un problème de compréhension car novice en client/serveur, je veux importer plusieurs valeurs d'un champ d'une table depuis le serveur vers l'application cliente. Mais n'ayant jamais développé une application client/Serveur, je nage ... Je m'inspire de l'exemple sur les composants DataSnap du livre Delphi 7 de P. Toth et O. Dahan.

    L'implémentation est la suivante :
    - Sur la fiche du Serveur j'ai déposé 2 TTables et 1 TDataSetProvider.
    - Sur la fiche Client j'ai déposé 1 TDBGrid, 1 TDataSource, 1 TClientDataSet1 et 1 TDCOMConnction1.

    Je récupère d'un côté, toutes les données du TTable1 du Serveur dans 1 TDBGrid1 sur la fiche Client. Jusqu'ici tout va bien.
    De l'autre côté j'aimerai récupérer les données du TTable2 du serveur dans le TComboBox1 de la fiche client. C'est là que tout se corse. Comment faire procéder. J'ai créé une procédure depuis la "Biblithèque de type" comme dans le livre en récupérant un pointeur. Mais je n'ai qu'une valeur et c'est normal. Voici le code de la procédure :

    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
    17
    18
    19
    20
    21
    22
    23
     
    //.. La ligne Uses ci-dessous cré une erreur à la compilation du serveur
    //uses FicheClient;
    ...
     
    procedure TTFicheServeur.ExploreTableClasse(out Nom: OleVariant); safecall;
    var i : integer;
    begin
       TabClasses.Open;
       //.. La ligne ci-dessous ne marche pas : erreur à la compilation
       //Form1.ComboBox1.Clear;
     
       For i := 1 TO TabClasses.RecordCount DO
           begin
               nom  := TabClasses.Fields[0].AsString;
     
    	  //.. J'ai voulu faire ce qu'il y a ci-dessous, mais ca ne marche pas
              //.. et j'utilise un TCombobox
              //Form1.ComboBox1.Items.Add(nom);;
           end
    end;
     
    ...
    Comment dois-je m'y prendre pour récupérer toutes les valeurs de la colonne 1 (champ "noms") pour les insérer dans mon TDBComboBox et non dans TComboBox de la fiche Client.

    Par ailleurs, je sais que c'est la valeur en paramètre qui m'est envoyée. Je nage.

    Merci pour toutes vos aides qui m'éclairont sur la façon d'établir des connexions entre le serveur et l'application client.

  2. #2
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 092
    Points : 41 067
    Points
    41 067
    Billets dans le blog
    62
    Par défaut
    je n'ai pas tout saisi , mais , déjà 2 trucs
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
       //.. La ligne ci-dessous ne marche pas : erreur à la compilation
       //Form1.ComboBox1.Clear;
    Code correction : Sélectionner tout - Visualiser dans une fenêtre à part
    Form1.Combobox1.Items.Clear;
    cependant, si je comprend bien Form1 est une forme de l'application client , donc , que fait elle en classe serveur ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    For i := 1 TO TabClasses.RecordCount DO
           begin
               nom  := TabClasses.Fields[0].AsString;
     
    	  //.. J'ai voulu faire ce qu'il y a ci-dessous, mais ca ne marche pas
              //.. et j'utilise un TCombobox
              //Form1.ComboBox1.Items.Add(nom);;
           end
    je n'aime pas utilisé le recordcount je préfére et de loin une
    boucle
    while not eof do begin .... next; end;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    while not Tabclasses.EOF do
     begin
        nom:=TabClasses.Fields[0].asString;
    	  //.. J'ai voulu faire ce qu'il y a ci-dessous, mais ca ne marche pas
              //.. et j'utilise un TCombobox
              //Form1.ComboBox1.Items.Add(nom);
        TabClasses.Next;
     end;
    bien sur , encore une fois : 'Qu'est-ce form1 fait au niveau du serveur ?'

    en fait , je pense qu'il faut un 2° TClientDataSet au niveau de client , le serveur se contente de passer le clientDataset (comme pour la DBGrid )

    la partie "remplissage" du combobox se fait soit à la main comme tat tentative corrigée, soit plus simple en utilisant un DBlookupcombobox par exemple

    Edit . PS Quelle version de Delphi ?
    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

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 46
    Points : 50
    Points
    50
    Par défaut
    SergioMaster

    En effet, l'utilisation de Form1 est inapproprié ici. C'était une tentative pour voir si l'inclusion de cette unité dans la partie serveur me donnerai accès aux valeurs que je veux récupérer pour les lister dans le ComboBox de la fiche client. Evidemment c'est un peu n'importe quoi.

    Je vais essayer un 2° TClientDataSet et un DBlookupcombobox comme tu me le proposes. En fait, est-ce qu'il faut un TClientDataset sur le client pour chaque TTable du serveur ? Et surtout comment établir la connexion avec un DBCombobox à défaut d'un ComboBox ?

    Merci encore SergioMaster et aussi pour toutes les autres aides à venir.

    J'ai oublié (pour SergioMaster),
    Edit . PS Quelle version de Delphi ?
    j'utilise DELPHI 7

Discussions similaires

  1. [C#] Client/serveur avec port série
    Par cyllix dans le forum Windows Forms
    Réponses: 13
    Dernier message: 21/08/2006, 09h56
  2. Réponses: 2
    Dernier message: 22/02/2006, 17h41
  3. Réponses: 1
    Dernier message: 01/02/2006, 17h48
  4. Client-serveur avec VB6 inside
    Par kremvax dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 28/11/2005, 13h08
  5. [SOCKET] connexion client serveur avec applet
    Par kaiser2003 dans le forum Applets
    Réponses: 2
    Dernier message: 06/10/2004, 22h32

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