Bonjour à toutes et tous,
Voici quelques questions qui écourtent mes nuits sur la meilleure façon de minimiser le trafic réseau entre une appli Delphi et une base de données (SQL Serveur 2000) sans toutefois générer une usine à gaz. Merci d’avance pour vos conseils.
Pour donner un cadre concret à mes questions, imaginons que l’on ne gère qu’une seule table : des individus (Id, nom, prénom, age, sexe …).
L’objectif est de construire une appli avec deux forms : La liste des individus et la fiche d’un individu.
La solution la plus simple consiste bien sur à utiliser sur mes deux forms des objets ContrôlesBD. Un DbGrid pour la liste et des DBEdit pour la fiche.
Cependant, dans ce cas, après avoir modifié les données sur un individu (ou ajouté un individu), la seule solution (à ma connaissance) pour actualiser la liste est de ré-interroger la source de données. Pas très bon pour ce qui est de minimiser le trafic réseau et la charge serveur !
J’ai donc opté pour une solution qui consiste à ne pas utiliser de DBGrid pour ma liste mais plutôt une ListView. Je charge celle-ci une première fois à partir d’une table ou d’une requête. Lors de la validation de la modification (ou l’ajout) d’un individu au travers de la fiche, j’appelle une méthode de ma liste en lui transmettant tous les paramètres sur l’individu (Id, Nom, Prénom, …). Cette procédure modifie (ou génère) l’item de l’individu dans la ListView.
La ListView est donc bien actualisée sans trafic réseau.
Cependant cette solution n’est pas réellement satisfaisante :
- Il faut implémenter les méthodes (update et insert) parfois complexes pour la ListView,
- La ListView n’offre pas toutes les options disponibles avec une DbGrid (autre que celle de Delphi) comme par exemple, le trie sur chaque colonne, la possibilité pour l’utilisateur de déplacer les colonnes, …..
Avez-vous d’autres solutions que les deux évoquées ci-dessus.
J’ai bien d’autres questions sur le même thème mais afin de ne pas surcharger ce post je vous les exposerais + tard.
Merci.
Partager