Bonjour,
J'ai un WindowsForm basé sur un TableAdapter.
Lorsque je lance mon formulaire, les données du serveur sont correctement
chargées grâce entre autre à la commande suivante :
TableAdapterName.Fill(DataSetName.TableName);
Ces données ne sont plus actualisées jusqu'au prochain rechargement en
utilisant toujours la même commande.
En admettant que mon application est multi-user, d'autres utilisateurs
peuvent faire des modifications sur la source de données.
Quelle est donc la meilleure solution pour que chaque utilisateur travaille
presque toujours avec les informations les plus à jour disponibles sur le
serveur?
Une possibilité est de prévoir un bouton Charger sur mon formulaire de sorte
à ce que l'utilisateur puisse cliquer sur ce bouton pour avoir les dernières
informations mises à jour; mais cette solution ne me paraît pas tellement
satisfaisante.
Merci d'avance pour vos contributions.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Jean BONBEUR
il y'a plein de solutions : - vous pouvez vous faire envoyer la modif quand elle se produit, par le biais d'un event qui decoule d'un service ou autre chose. ça dispatch en pagaille sur le reseau, tout ça pour pas un gros pourcentage de cibles qui vont en avoir l'utilité.
- vous pouvez recharger à interval régulier le truc. l'ennui, c'est que vous allez demander beaucoup d'infos, et que peu a changé. ça peut degrader les perfs reseau si ce sont des grosses tables, ou que vous etes nombreux sur le coup.
- vous pouvez utiliser une technique qui s'appuie sur un TIMESTAMP : un champ de ce type dans une table est mis à jour avec un nouveau numero (croissant) à chaque modif de la ligne ou il se trouve.donc, si vous chargez vos données, et que vous vous faites livrer le max de timestamp, vous pouvez etre certain que tout ce qui est plus grand que ce n° la prochaine fois est modifié. donc, en gros, ça revient à un SELECT field1 , ... FROM [nom] WHERE stamp>@value, ce qui dépote grave avec un index, et fourni le strict nécessaire.
libre à vous de laisser la mise à jour à l'initiative de l'utilisateur, ou la faire periodiquement.
mais culturellement, on ne fait pas ça pour résoudre la concurrence. on fait comme le gestionnaire de source, on s'appuie sur de la transaction optimiste puisqu'on est en mode deconnecté.
en gros, vous soumettez vos modifications lors de l'update, et si quelque chose à bougé entre le moment ou vous avez demandé et le moment ou vous sauvez, la ligne reste dans le dataset avec un marqueur d'erreur, et donc à ce moment précis, vous rechargez ces lignes qui ont bougé, ce qui est quelque part du merge comme pour le gestionnaire de sources...
"SL3News" a écrit dans le message de news: O780PzT%
Bonjour, J'ai un WindowsForm basé sur un TableAdapter. Lorsque je lance mon formulaire, les données du serveur sont correctement chargées grâce entre autre à la commande suivante : TableAdapterName.Fill(DataSetName.TableName); Ces données ne sont plus actualisées jusqu'au prochain rechargement en utilisant toujours la même commande. En admettant que mon application est multi-user, d'autres utilisateurs peuvent faire des modifications sur la source de données. Quelle est donc la meilleure solution pour que chaque utilisateur travaille presque toujours avec les informations les plus à jour disponibles sur le serveur? Une possibilité est de prévoir un bouton Charger sur mon formulaire de sorte à ce que l'utilisateur puisse cliquer sur ce bouton pour avoir les dernières informations mises à jour; mais cette solution ne me paraît pas tellement satisfaisante. Merci d'avance pour vos contributions.
il y'a plein de solutions :
- vous pouvez vous faire envoyer la modif quand elle se produit, par le
biais d'un event qui decoule d'un service ou autre chose. ça dispatch en
pagaille sur le reseau, tout ça pour pas un gros pourcentage de cibles qui
vont en avoir l'utilité.
- vous pouvez recharger à interval régulier le truc. l'ennui, c'est que vous
allez demander beaucoup d'infos, et que peu a changé. ça peut degrader les
perfs reseau si ce sont des grosses tables, ou que vous etes nombreux sur le
coup.
- vous pouvez utiliser une technique qui s'appuie sur un TIMESTAMP : un
champ de ce type dans une table est mis à jour avec un nouveau numero
(croissant) à chaque modif de la ligne ou il se trouve.donc, si vous chargez
vos données, et que vous vous faites livrer le max de timestamp, vous pouvez
etre certain que tout ce qui est plus grand que ce n° la prochaine fois est
modifié. donc, en gros, ça revient à un SELECT field1 , ... FROM [nom] WHERE
stamp>@value, ce qui dépote grave avec un index, et fourni le strict
nécessaire.
libre à vous de laisser la mise à jour à l'initiative de l'utilisateur, ou
la faire periodiquement.
mais culturellement, on ne fait pas ça pour résoudre la concurrence. on fait
comme le gestionnaire de source, on s'appuie sur de la transaction optimiste
puisqu'on est en mode deconnecté.
en gros, vous soumettez vos modifications lors de l'update, et si quelque
chose à bougé entre le moment ou vous avez demandé et le moment ou vous
sauvez, la ligne reste dans le dataset avec un marqueur d'erreur, et donc à
ce moment précis, vous rechargez ces lignes qui ont bougé, ce qui est
quelque part du merge comme pour le gestionnaire de sources...
"SL3News" <toto@tata.fr> a écrit dans le message de news:
O780PzT%23HHA.4752@TK2MSFTNGP04.phx.gbl...
Bonjour,
J'ai un WindowsForm basé sur un TableAdapter.
Lorsque je lance mon formulaire, les données du serveur sont correctement
chargées grâce entre autre à la commande suivante :
TableAdapterName.Fill(DataSetName.TableName);
Ces données ne sont plus actualisées jusqu'au prochain rechargement en
utilisant toujours la même commande.
En admettant que mon application est multi-user, d'autres utilisateurs
peuvent faire des modifications sur la source de données.
Quelle est donc la meilleure solution pour que chaque utilisateur
travaille presque toujours avec les informations les plus à jour
disponibles sur le serveur?
Une possibilité est de prévoir un bouton Charger sur mon formulaire de
sorte à ce que l'utilisateur puisse cliquer sur ce bouton pour avoir les
dernières informations mises à jour; mais cette solution ne me paraît pas
tellement satisfaisante.
Merci d'avance pour vos contributions.
il y'a plein de solutions : - vous pouvez vous faire envoyer la modif quand elle se produit, par le biais d'un event qui decoule d'un service ou autre chose. ça dispatch en pagaille sur le reseau, tout ça pour pas un gros pourcentage de cibles qui vont en avoir l'utilité.
- vous pouvez recharger à interval régulier le truc. l'ennui, c'est que vous allez demander beaucoup d'infos, et que peu a changé. ça peut degrader les perfs reseau si ce sont des grosses tables, ou que vous etes nombreux sur le coup.
- vous pouvez utiliser une technique qui s'appuie sur un TIMESTAMP : un champ de ce type dans une table est mis à jour avec un nouveau numero (croissant) à chaque modif de la ligne ou il se trouve.donc, si vous chargez vos données, et que vous vous faites livrer le max de timestamp, vous pouvez etre certain que tout ce qui est plus grand que ce n° la prochaine fois est modifié. donc, en gros, ça revient à un SELECT field1 , ... FROM [nom] WHERE stamp>@value, ce qui dépote grave avec un index, et fourni le strict nécessaire.
libre à vous de laisser la mise à jour à l'initiative de l'utilisateur, ou la faire periodiquement.
mais culturellement, on ne fait pas ça pour résoudre la concurrence. on fait comme le gestionnaire de source, on s'appuie sur de la transaction optimiste puisqu'on est en mode deconnecté.
en gros, vous soumettez vos modifications lors de l'update, et si quelque chose à bougé entre le moment ou vous avez demandé et le moment ou vous sauvez, la ligne reste dans le dataset avec un marqueur d'erreur, et donc à ce moment précis, vous rechargez ces lignes qui ont bougé, ce qui est quelque part du merge comme pour le gestionnaire de sources...
"SL3News" a écrit dans le message de news: O780PzT%
Bonjour, J'ai un WindowsForm basé sur un TableAdapter. Lorsque je lance mon formulaire, les données du serveur sont correctement chargées grâce entre autre à la commande suivante : TableAdapterName.Fill(DataSetName.TableName); Ces données ne sont plus actualisées jusqu'au prochain rechargement en utilisant toujours la même commande. En admettant que mon application est multi-user, d'autres utilisateurs peuvent faire des modifications sur la source de données. Quelle est donc la meilleure solution pour que chaque utilisateur travaille presque toujours avec les informations les plus à jour disponibles sur le serveur? Une possibilité est de prévoir un bouton Charger sur mon formulaire de sorte à ce que l'utilisateur puisse cliquer sur ce bouton pour avoir les dernières informations mises à jour; mais cette solution ne me paraît pas tellement satisfaisante. Merci d'avance pour vos contributions.