Comment actualiser deux formes liées à une seule table?

Leader2000 Messages postés 184 Date d'inscription mercredi 24 mai 2006 Statut Membre Dernière intervention 28 août 2015 - 2 mars 2007 à 18:00
ThWilliam Messages postés 418 Date d'inscription mardi 3 janvier 2006 Statut Membre Dernière intervention 26 novembre 2013 - 3 mars 2007 à 18:11
Salut!


J'ai une question juste liée à une incompatibilité.
Ayant deux formes dans mon petit programme. Chacune de ces formes contient un DBgrid liées à une même
table de données).
J'ai toujours eu il y a belle lurette un probleme d'actualisation. Cela veut dire par exemple que, si je modifie
(ou enregsitre) des données dans la dite table de données se trouvant dans ma forme1. Et si j'aimerai consulter
dans les prochaines secondes les mêmes données dans ma forme2 (ayant aussi un DBgrid). Je n'arrive pas à rencontrer
les dernières données actualisées (dans ma forme1).
Que dois-je faire? je dois d'abord reinicialiser mon programme... Et délà, je peux voir mes données s'actualiser.
N'y a t-il pas une manière quelconque à faire pour eviter de reincialiser tout le temps son programme...


Permettez-moi d'informer que si j'utilise un PageControl. Ça marche sans problème! Mais pour le moment, je n'arrive pas
à faire acturaliser deux ou plusieurs formes des DBgrig liées à une et alors une seule table.


Merci infini d'avance.


Leader2000

3 réponses

ThWilliam Messages postés 418 Date d'inscription mardi 3 janvier 2006 Statut Membre Dernière intervention 26 novembre 2013 4
3 mars 2007 à 09:51
Salut Leader2000.

Je crois que tu confonds "table" et "fichier de données".

Si tu as sur Form1 : Table1, DataSource1, DBGrid1 :
   Table1.TableName:= 'MyData.db'
   DataSource1.DataSet:= Table1
   DBGrid1.DataSource:= DataSource1

et sur Form2 : un DbGrid2
   Form2.DbGrid2.DataSource:= Form1.DataSource1

dans ce cas, il n'y aucun problème d'actualisation, puisque le DbGrid2 utilise la même table.
Mais je ne vois pas d'intérêt dans ce cas à créer 2 dbgrid !

Par contre, si tu as sur Form2 : Table2,  DataSource2,  DBGrid2 :
      Form2.Table2.TableName:= 'MyData.db'
      Form2.DataSource2.DataSet:= Form2.Table2
      Form2.DBGrid2.DataSource:= Form2.DataSource2

dans ce cas, tu dois provoquer la réactualisation de Table2 pour être certain qu'elle reflète l'état des données suite à une modification ou ajout dans Table1. (et l'inverse est vrai aussi pour retourner à Form1)
Très simple, je suppose que ton appel à Form2 se fait en ShowModal :

procedure TForm2.FormShow(Sender: TObject);
begin
   table2.refresh;
end;

Je ne sais pas si j'ai été suffisamment clair...

A +
Thierry
0
Leader2000 Messages postés 184 Date d'inscription mercredi 24 mai 2006 Statut Membre Dernière intervention 28 août 2015
3 mars 2007 à 17:41
Salut Thierry!


Merci de me venir en aide.
Tous les codes on été testé à la précompilation (Ctrl+F9). Et ça marche!
Seulement, il s'pose juste un petit problème de message d'erreur lors de son ''running'' (lors de son fonctionnement).
J'ai mis ces codes ci'dessous dans l'evènement Onactivate de ma forme1. Et voici le message ''Cannot perform
this opertion on an open dataset''.
   
   Table1.TableName:= 'personnel';
   DataSource1.DataSet:= Table1;
   DBGrid1.DataSource:= DataSource1;


Et quand je mets celui-ci dans l'evènement OnShow de ma forme2. Voici le message d'erreur ''insufficient column key
information for updating or refreshing''.

Table1.refresh;


Leader2000


N.B. Ne me sais-je pas trompé d'evenèment




 
0
ThWilliam Messages postés 418 Date d'inscription mardi 3 janvier 2006 Statut Membre Dernière intervention 26 novembre 2013 4
3 mars 2007 à 18:11
Salut Leader2000.

La première erreur vient du fait que tu réassignes la propriété TableName alors que Table1 est déjà active (inspecteur d'objects : propriété active).
Attention : les lignes que j'ai mises concernant table,datasource et dbgrid n'étaient qu'à titre d'explication ! Tu ne dois pas dans ton cas rentrer cela en code, mais  assigner les propriétés en mode conception dans l'inspecteur d'objets ! Le seul code à écrire c'est dans l'événement OnShow de TForm2 : Table2.Refresh;
Ce qui va réactualiser la deuxième table déclarée (en principe dans Form2). 
Si tu rencontres encore des problèmes, précise-nous les compos que tu utilises (table,datasource,dbgrid) et la manière dont tu les as reliés.

A +
Thierry 
0
Rejoignez-nous