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 :

Rafraichissement des données sql serveur entre clients /serveur


Sujet :

Bases de données Delphi

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2011
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 30
    Points : 12
    Points
    12
    Par défaut Rafraichissement des données sql serveur entre clients /serveur
    bonjour

    Je développe une application client serveur (langage de programmation Delphi le moteur de base de donné SQL serveur édition standard 2005 ) le serveur sur la pc et les client sur des machines virtuel ,la connexion est bonne mais mon problème est le suivant :
    Les modifications des données des tables des postes client ne figure pas dans la machine serveur sauf si je rafraichie la base du coté serveur ( tous ce que je veux que les modifications soit rafraicher automatiquement entre les postes client et le serveur )
    Merci d’avance

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 847
    Points : 52 962
    Points
    52 962
    Billets dans le blog
    6
    Par défaut
    Tout dépend comment vous avez programmé et quels objets vous avez utilisé dans Delphi.
    Par exemple avec des client dataset, ce serait normal.

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Membre à l'essai
    Inscrit en
    Mars 2011
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 30
    Points : 12
    Points
    12
    Par défaut Merci pour ta réponse
    BONJOUR

    J’ai programmée avec Delphi
    Les composants utilisés :
    Ttable,
    DataSource
    Database
    Session
    StoredProc



  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 847
    Points : 52 962
    Points
    52 962
    Billets dans le blog
    6
    Par défaut
    Il ne faut pas utiliser les TTable. Un SGBDR C/S travaille par requête SQL, pas table par table.

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  5. #5
    Membre à l'essai
    Inscrit en
    Mars 2011
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 30
    Points : 12
    Points
    12
    Par défaut bonjour
    Bonjour
    Monsieur je demande votre conseil, d’ai développée un logiciel avec delphi avec ttable, et voila que je m’affronte au problème cité au dessous,
    Dit moi Monsieur comment je peux transformer mon logiciel de ttable à sql sachant que j’ai travail le corps de programme a 90 % sous les événements de ttable .
    D’une manier rapide
    Merci a l’avance
    (Désolée si j’ai pris le temps de répondre problème d’électricité avec toute cette neige)

  6. #6
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 847
    Points : 52 962
    Points
    52 962
    Billets dans le blog
    6
    Par défaut
    Il faut les changer en TQuery.

    Demandez de l'aide sur le forum DELPHI.

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  7. #7
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 551
    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 551
    Points : 25 124
    Points
    25 124
    Par défaut
    En Paradox, un TTable ouvert n'appliquait pas les données tant que l'on a pas fait un Close() ou un FlushBuffers !
    En Interbase, j'avais tout remplacer par des TQuery à coup de SELECT, INSERT, UPDATE... du SQL !

    Sinon le BDE c'est obsolète depuis 10 ans !
    Tous les ans Thierry Laborde fait son discours sur comment remplacer le BDE par DBExpress !

    Comme cela utilise ODBC en interne, tu devrais migrer vers ADO et TADOQuery !
    Vu que tu dois passer en SQL, autant changer le fournisseur d'accès au passage !
    Attention, c'est vraiment une autre méthode de programmation !
    C'est un gros chantier !

    Ensuite pour le rafraichissement, si tu as une modification sur le Poste A, j'ignore les mécanismes SQL Server à ce sujet, mais le Poste B doit relancer le SQL, c'est d'ailleurs tout la problématique des accès concurrentiel, deux Poste ouvre la même fiche, la modifie, selon la configuration des transactions et des mise à jour, cela peut refuser la 2nde modification car les données sont obsolètes et nécessite une réconciliation !
    Le Edit\Post du TADOQuery vont gérer la réconciliation plus ou moins facilement comme dans le sujet : insert DBGrid avec TADOQuery et requete avec jointure
    Personnellement, je préfère un ClientDataSet qui permet les modifications purement locales et générer moi même le SQL (par une couche métier et une couche OR) pour une meilleure maîtrise des flux et optimisations !



    en InterBase, il y a un système de Notification si je ne me trompe pas, il faudrait un équivalent SQL Server, si ça existe
    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

  8. #8
    Membre à l'essai
    Inscrit en
    Mars 2011
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 30
    Points : 12
    Points
    12
    Par défaut bonjour
    Bonjour
    Une question : est ce que je peux travail (client/ serveur) sans utiliser le langage SQL ?.
    Pour ne pas refaire tous le travail je transforme BDE à ADO est ce que c’est une bonne décision
    Merci a l’avance

  9. #9
    Membre actif
    Inscrit en
    Décembre 2004
    Messages
    390
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 390
    Points : 288
    Points
    288
    Par défaut
    En Client/Server, je ne pense pas que les tables soient les composants les plus adéquats ! Le langage SQL s'y prête nettement mieux et, donc, mérite le temps que ça prendra.

    NB : On est tous passé par les TTables !

  10. #10
    Membre à l'essai
    Inscrit en
    Mars 2011
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 30
    Points : 12
    Points
    12
    Par défaut merci
    Merci
    Je vais apprendre le SQL.
    A bien tôt

  11. #11
    Membre à l'essai
    Inscrit en
    Mars 2011
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 30
    Points : 12
    Points
    12
    Par défaut bonjour
    J’ai fais un petit exemple,
    Langage DELPHI 7, Moteur de base de données SQL Server 2005,
    Les composants : ADOConnection1, ADOQuery1, DataSource1
    J’ai créé 2 exécutables : un copy dans la machine virtuel et l’autre dans la machine principale,
    Le code source est le suivant

    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
    With ADOConnection1 do
     begin
    Connected:=FALSE;
    ConnectionString:='Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=CHRONOEXEMPLE;Data Source=PC-DE-XXXX;
    Connected:=true;
    End;
    with ADOQuery1 do begin
    SQL.Add('SELECT * FROM ST_FART');
    Connection:=ADOConnection1;
    CursorLocation:= clUseServer;
    LockType:= ltOptimistic;
    CursorType:=ctKeyset;
    Active:=true;
    Edit1.Text:=fields[1].Value;
    end;
    Et pour le bouton modifier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    procedure TForm1.Button2Click(Sender: TObject);
    begin
    with ADOQuery1 do begin
    Edit;
    fields[1].Value:=Edit1.Text;
    Post;
    end;
    NB : quand je modifier dans l’application client, les modifications ne se voie pas sur la partie serveur

  12. #12
    Membre actif
    Inscrit en
    Décembre 2004
    Messages
    390
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 390
    Points : 288
    Points
    288
    Par défaut
    Je ne travaille pas avec SQL Server mais, à mon avis, il te manque un Commit et un refresh sur la machine distante !

  13. #13
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 095
    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 095
    Points : 41 084
    Points
    41 084
    Billets dans le blog
    62
    Par défaut
    Bonjour,
    Moi je dirais que c'est plus complexe que ça , mais je ne suis pas un fan D'ADO .

    Tout d'abord merci d'encapsuler le code (balises CODE, /CODE faite par le bouton #)

    Remarques
    1. Pourquoi ne pas utiliser un DBText a la place d'un Edit1
    2. As tu fais un essai avec un UPDATE ?
    3. Un 'SELECT * FROM ST_FART' renvoi tous les enregistrements donc autant utilisé un ADOTable
    4. avec un SELECT il est préférable d'indiquer les champs que l'on veut récupéré plutôt que d'utiliser le *
    5. La table a t'elle une Clé


    Je suis sur qu'il y a un tutoriel avec ADO
    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

  14. #14
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    229
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 229
    Points : 60
    Points
    60
    Par défaut
    Selon la méthode que tu utilise, je pense qu'il te faut faire un Post, puis un refresh sur le composant AdoQuery après chaque mise à jour.

  15. #15
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Points : 1 113
    Points
    1 113
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    Bonjour,
    Moi je dirais que c'est plus complexe que ça , mais je ne suis pas un fan D'ADO .
    Moi j'en suis fan.. lol, salut Serge.

    @ROMILA
    Pour ton problème réseau, essai un open close (plutot qu'un active true/false), pour voir.

    Sinon utilise plutot clUserClient pour ton cursorLocation.

    @+

  16. #16
    Membre à l'essai
    Inscrit en
    Mars 2011
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Mars 2011
    Messages : 30
    Points : 12
    Points
    12
    Par défaut bonjour
    Merci pour toutes les réponses
    Pour activer désactive la base à chaque foi c pas intéressant, sur tous dans la programmation client/ serveur.
    Mais pour l’utilisation de clUserClient je vais voire

  17. #17
    Membre averti Avatar de archonte
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 341
    Points : 392
    Points
    392
    Par défaut
    Je pense qu'il faudrait séparer l'initialisation des composants ADOConnection et ADOQuery d'une part et les méthodes de sauvegarde / récupération des données de l'autre.

    Dans l'exemple proposé ('J’ai créé 2 exécutables') par ROMILA je dirais que l'initialisation à lieu dans une méthode de récupération de données (cf. 'SELECT * FROM ST_Fart'), mais la méthode de sauvegarde n'en connait rien.

    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
    // { 1 } dans le Form.Create ou dans un DataModule, par exemple :
    With ADOConnection1 do
    begin
      Connected := FALSE;
      ConnectionString := 'Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=CHRONOEXEMPLE;Data Source=PC-DE-XXXX;';
      // chaine de connexion non vérifiée !
      Connected := TRUE;
    End;
     
    with ADOQuery1 do 
    begin
      Close; // toujours travailler sur une Query fermée !
      Connection := ADOConnection1;
      CursorLocation := clUseServer;
      LockType:= ltOptimistic;
      CursorType:=ctKeyset;
    end;
    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
    24
    25
    26
    27
    // { 2 } la méthode de récupération
    procedure TForm1.GetData;
    begin
      with ADOQuery1 do
      begin
        Close;
        SQL.Text := 'SELECT MonChampUn FROM ST_FART'; // avec SQL.Add() il faut faire un Clear avant usage !
        Active := TRUE;
    
        // tester si au moins un enregistrement récupéré (penser à formuler une requête SELECT plus restrictive : avec une clause WHERE par exemple !
        if RecordCount > 0 then
        begin
          // traitement si présence d'au moins un enregistrement
          // aller au premier enregistrement
          Fields.DataSet.FindFirst;
          // récupérer la donnée
          (* ? penser à traiter le cas avec plusieurs enregistrements retournés par la requête ? *)
          Edit1.Text := FieldByName('MonChampUn').AsString;
        end else
        begin
          // traitement si pas d'enregistrement
          Edit1.Text := ''; // vider le champ texte de Edit1 ?
        end;
      Close; // fermer ADOQuery1
      end;
    end;


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    // { 3 } la méthode de sauvegarde
    procedure TForm1.SaveData;
    begin
      with ADOQuery1 do
      begin
        Close;
        SQL.Text := 'INSERT INTO ST_Fart ('MonChampUn') VALUES (':PUn');' // utilise INSERT INTO ... avec du SQL, et pourquoi pas les parametres !
        ParamCheck := true;
        Parameters.ParamByName('PUn').Value :=  Edit1.Text;
        ExecSQL; // et non Active := True pour un INSERT !
      end;
    end;
    "Je n'ai jamais rencontré d'homme si ignorant qu'il n'eut quelque chose à m'apprendre."
    Galilée

Discussions similaires

  1. programme d'échange de données entre client/serveur
    Par g_lahcene dans le forum Réseau
    Réponses: 4
    Dernier message: 04/11/2008, 09h49
  2. [Client/serveur] Compiler Client / Serveur
    Par torNAdE dans le forum Linux
    Réponses: 3
    Dernier message: 20/10/2008, 22h08
  3. envoi des données d'un poste client vers le serveur
    Par ouadie99 dans le forum ASP.NET
    Réponses: 5
    Dernier message: 11/06/2008, 11h52
  4. Réponses: 8
    Dernier message: 08/09/2006, 15h32
  5. Client-Serveur Dcom = Client+Serveur lancés sur la machine ?
    Par Jilam dans le forum Bases de données
    Réponses: 6
    Dernier message: 27/07/2004, 14h55

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