Précédent   Forum des professionnels en informatique > Environnements de développement > Delphi > Bases de données
Bases de données Vos questions concernant les bases de données (BDE, Access, SqlServer...)
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 03/02/2012, 23h39   #1
Invité régulier
 
ROMILA LIZA
Inscription : mars 2011
Messages : 30
Détails du profil
Informations personnelles :
Nom : ROMILA LIZA

Informations forums :
Inscription : mars 2011
Messages : 30
Points : 5
Points : 5
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
ROMILA est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/02/2012, 08h55   #2
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 959
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 959
Points : 17 791
Points : 17 791
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
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2012, 15h32   #3
Invité régulier
 
ROMILA LIZA
Inscription : mars 2011
Messages : 30
Détails du profil
Informations personnelles :
Nom : ROMILA LIZA

Informations forums :
Inscription : mars 2011
Messages : 30
Points : 5
Points : 5
Par défaut Merci pour ta réponse

BONJOUR

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


ROMILA est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/02/2012, 16h04   #4
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 959
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 959
Points : 17 791
Points : 17 791
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
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/02/2012, 22h49   #5
Invité régulier
 
ROMILA LIZA
Inscription : mars 2011
Messages : 30
Détails du profil
Informations personnelles :
Nom : ROMILA LIZA

Informations forums :
Inscription : mars 2011
Messages : 30
Points : 5
Points : 5
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)
ROMILA est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 08/02/2012, 09h22   #6
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 959
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 959
Points : 17 791
Points : 17 791
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
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/02/2012, 11h16   #7
Expert Confirmé Sénior
 
Avatar de ShaiLeTroll
 
Homme
Développeur C++\Delphi
Inscription : juillet 2006
Messages : 7 845
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 31
Localisation : France

Informations professionnelles :
Activité : Développeur C++\Delphi
Secteur : High Tech - Électronique et micro-électronique

Informations forums :
Inscription : juillet 2006
Messages : 7 845
Points : 10 549
Points : 10 549
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

Parisien ! Dites NON à la VO ST au Cinéma !
Soit VF Soit VO sans sous-titre
ShaiLeTroll est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/02/2012, 23h11   #8
Invité régulier
 
ROMILA LIZA
Inscription : mars 2011
Messages : 30
Détails du profil
Informations personnelles :
Nom : ROMILA LIZA

Informations forums :
Inscription : mars 2011
Messages : 30
Points : 5
Points : 5
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
ROMILA est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2012, 12h19   #9
Membre actif
 
Inscription : décembre 2004
Messages : 294
Détails du profil
Informations forums :
Inscription : décembre 2004
Messages : 294
Points : 199
Points : 199
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 !
akli_agha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/02/2012, 18h33   #10
Invité régulier
 
ROMILA LIZA
Inscription : mars 2011
Messages : 30
Détails du profil
Informations personnelles :
Nom : ROMILA LIZA

Informations forums :
Inscription : mars 2011
Messages : 30
Points : 5
Points : 5
Par défaut merci

Merci
Je vais apprendre le SQL.
A bien tôt
ROMILA est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/02/2012, 00h08   #11
Invité régulier
 
ROMILA LIZA
Inscription : mars 2011
Messages : 30
Détails du profil
Informations personnelles :
Nom : ROMILA LIZA

Informations forums :
Inscription : mars 2011
Messages : 30
Points : 5
Points : 5
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 :
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 :
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
ROMILA est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/02/2012, 16h18   #12
Membre actif
 
Inscription : décembre 2004
Messages : 294
Détails du profil
Informations forums :
Inscription : décembre 2004
Messages : 294
Points : 199
Points : 199
Je ne travaille pas avec SQL Server mais, à mon avis, il te manque un Commit et un refresh sur la machine distante !
akli_agha est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/02/2012, 08h25   #13
Modérateur
 
Avatar de SergioMaster
 
Serge Girard
Développeur informatique
Inscription : janvier 2007
Messages : 3 625
Détails du profil
Informations personnelles :
Nom : Serge Girard
Âge : 55
Localisation : France

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

Informations forums :
Inscription : janvier 2007
Messages : 3 625
Points : 4 529
Points : 4 529
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
__________________
La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein
J'entends et j'oublie. Je vois et je me souviens. Je fais et je comprends . Confucius
SergioMaster est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/02/2012, 17h40   #14
Candidat au titre de Membre du Club
 
Homme
Développeur informatique
Inscription : août 2006
Messages : 199
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 : 199
Points : 13
Points : 13
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.
Klemsy78 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/02/2012, 17h59   #15
Membre émérite
 
Avatar de BuzzLeclaire
 
Homme
Dev/For/Vte/Ass
Inscription : août 2008
Messages : 1 312
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 312
Points : 856
Points : 856
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.

@+
BuzzLeclaire est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/03/2012, 20h11   #16
Invité régulier
 
ROMILA LIZA
Inscription : mars 2011
Messages : 30
Détails du profil
Informations personnelles :
Nom : ROMILA LIZA

Informations forums :
Inscription : mars 2011
Messages : 30
Points : 5
Points : 5
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
ROMILA est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/03/2012, 15h56   #17
Membre confirmé
 
Avatar de archonte
 
Inscription : mai 2007
Messages : 315
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 315
Points : 256
Points : 256
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 :
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 :
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 :
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
archonte est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h47.


 
 
 
 
Partenaires

Hébergement Web