Bonjour,
Conclusion un peut simpliste
Il ne s'agit pas d'un probleme au niveau du moteur mais plus d'un problème au niveau du mode de programmation.
Il faut commencer par comprendre la technologie des deux systemes qui sont mit à votre disposition:
- Hyper File Classisque:Vous traivaillez sur des fichiers sur lesquelles vous disposez d'un acces direct soit en local soit sur un serveur qui partage le répertoire qui contient les fichiers de données
Chaques fonctions H* sont appliquées directement sur le fichiers de données. Accès très rapide langage dit natif au moteur de données.
Ce qui ralentit le traitement dans ce cas n'est pas le nombre de lecture / ecriture faite sur le fichier (un par ordre lancé) mais plutot le taux de trafic du réseau (100 mbits ayant de meilleurs temps de réponse que sur du 10 mbits) quoi encore certains postes mal configurés peuvent ralentir aussi le trafic
Les fonctions H* manipule le fichier enregistrement par enregistrement
Si vous utilisé cette technique sur un Client / Serveur cela correspont à autant de requête lancer sur le serveur qu'il existe de commande H* dans votre boucle ce qui est completement innadapté.
- En Client / ServeurEn Client / serveur on utilisera de préférence donc des requêtes SQL qui manipuleront les données par paquets
Une demande = plusieurs lignes retournées, modifiées ou supprimées selon le besoin.
Le trafic utilisé est alors limité entre le client et le serveur un orde passé pour manipuler plusieurs enregistrement.
L'ordre est alors envoyé au serveur qui lui meme l'exécute en local ce qui est très rapide.
Ayez toujours à l'esprit qu'en client / serveur il faut que le serveur interprête les requêtes avec dans certain cas du cryptage + de la compression à chaque dialogue, d'ou l'intéret de limiter le nombre de demande.
Le language SQL est adapté pour cela
ExempleEn HF classique votre boucle avec les ordre H* ne fait que déplacer le curseur du fichier d'enregistrement en enregistrement (En local ou meme en reseau cela reste très rapide)
Cette technique utilisé sur un client serveur
pour chaque ordre H* une requête est préparée puis envoyée au serveur qui l'interprête en locale puis l'exécute. Prépare la réponse et enfin vous la renvoie avec tout ce que ce type de dialogue peut engendrer comme ressources nécessaires.
(Autant d'échange qu'il y a de fonctions H*)
Avec le language Sql:La requête est envoyer au serveur, interprétée sur le serveur puis exécuter, Cela peut agir sur un paquet de données ou bien meme sur la totalité du fichier, ensuite le contre rendu ou résultat, est renvoyer au client(Un seul echange)
par exemple dans votre cas les vues serait les bien venues
on récupères l'intégralitée des enregistrement, on les modifies un par un en local et on demande ensuite d'appliquer les modifs sur le serveur en une seul fois.
(Bien sur je considère ici que chaque valeur à modifier est différentes ou variables pour chacun des enregistrements
Dans le cas contraire s'il s'agissait de modifier la valeur d'une rubrique de tous les enregistrement avec une valeur unique il serait préférable d'utiliser une simple requête SQL du type:
UPDATE
SET = WHERE =