PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV 2024 → Ré-indexation automatique des fichiers
Ré-indexation automatique des fichiers
Débuté par fahugues, 30 jan. 2006 23:27 - 9 réponses
Posté le 30 janvier 2006 - 23:27
Bjr!

j'ai un petit soucis : je voudrais intégrer dans le menu de mon appli, une option pour lancer la reindexation de tous les fichiers de ma bd. et je voudrais faire apparaitre une jauge pendant ce temps. comment le faire concretement surtout le traitement jauge et reindextaion ensemble.
merci du coup de main
---fahug
Posté le 01 février 2006 - 07:22
En WD10, il y a moyen de lancer un menu qui fait le nettoyage des fichiers. Voir aide.
En WD9, il y a le composant wdk, du moins je crois qu'il s'appele comme cela.
Posté le 01 février 2006 - 10:16
Bonjour


"fahugues" <fahugues@gmail.com> a écrit dans le message de news:
43df9e7e$1@news.pcsoft.fr...

Bjr!

j'ai un petit soucis : je voudrais intégrer dans le menu de mon appli, une
option pour lancer la reindexation de tous les fichiers de ma bd. et je
voudrais faire apparaitre une jauge pendant ce temps. comment le faire
concretement surtout le traitement jauge et reindextaion ensemble.
merci du coup de main
---fahug


Pour mes logiciels développés avec WD9 (tous en HF classic), j'ai bricolé un
truc tout simple, de façon à ce que les utilisateurs puissent, quand ils le
souhaitent, procéder à la ré-indexation "à chaud" de tous les fichiers de la
base de données.

Pour cela, dans un menu, j'ai placé une option "Ré-indexation de tous les
fichiers".
Donc, quand un utilisateur souhaite, pour quelque raison que ce soit,
procéder à la ré-indexation, il sélectionne cette option du menu.
Le fait de sélectionner cette option place un code spécial dans la base de
registres de Windows via SauveParametre et engendre une réindexation de tous
les fichiers HF au prochain démarrage du logiciel.

Pour ce faire, dans le code d'initialisation du projet et avant tout
traitement sur les fichiers HF, il y a une vérification de la présence de ce
code spécial via ChargeParametre:
1) s'il ne s'y trouve pas: il ne se passe rien
2) s'il s'y trouve : tous les fichiers index sont effacés

Ensuite, via la réindexation à chaud, les index sont recréés
automatiquement.

Puisque, dans certaines situations, les problèmes d'index peuvent empêcher
le bon fonctionnement du logiciel (et donc son démarrage), ce démarrage du
logiciel avec suppression automatique des index peut également être effectué
depuis un raccourci placé dans le menu Démarrer de Windows, en utilisant un
paramètre spécial sur la ligne de commande

A+

Val
Posté le 01 février 2006 - 10:30
Personnellement, j'ai créer une fenêtre avec 2 jauges ...

Une : Etat de la réindexation du fichier en cours
Deux : Etat de la réindexation totale des fichiers

Ensuite je parcours les tables 1 par 1 en acrémentant les compteurs...

C'est un peu de code ( pas trop je te rassure) mais la retranscription pour l'utilisateur est trés clair au moins !!

Sinon la solution de Val est trés intéressante, et si d'ailleurs elle pouvait faire partager son code cela pourrait m'intéresser !!!
Posté le 01 février 2006 - 11:22
Bonjour

"Aurélien MACHABERT" <43@gauthiersa.fr> a écrit dans le message de news:
43e07096$1@news.pcsoft.fr...



Personnellement, j'ai créer une fenêtre avec 2 jauges ...

Une : Etat de la réindexation du fichier en cours
Deux : Etat de la réindexation totale des fichiers

Ensuite je parcours les tables 1 par 1 en acrémentant les compteurs...

C'est un peu de code ( pas trop je te rassure) mais la retranscription
pour l'utilisateur est trés clair au moins !!

Sinon la solution de Val est trés intéressante, et si d'ailleurs elle
pouvait faire partager son code cela pourrait m'intéresser !!!


En fait, c'est très simple:

1) J'ai une option de menu libellée ainsi:
"Reconstruire tous les index de la base de données"

Ensuite, dans le code de sélection de ce menu, j'ai ceci:
**************
SauveParamètre("Systeme\Lesindex",1)
Info("Au prochain démarrage du logiciel, tous les index de la base"+rc+"de
données seront reconstruits automatiquement au fur et"+rc+"à mesure des
besoins.")
**************


2) dans le code INIT du projet, avant manipulation des fichiers HF, j'ai
ceci
**************
FichierNDX est une chaine

SI ChargeParamètre("Systeme\Lesindex",0)=1 ALORS
TitreSuivant("Maintenance")
Info("Tous les index de la base de données vont être
reconstruits"+rc+"automatiquement au fur et à mesure des besoins.")
FichierNDX = fRep(RepDonnes+"\*.NDX",frFichier)

TANTQUE FichierNDX <>""
fSupprime(RepDonnes+"\"+FichierNDX,frLectureSeule)
Multitâche(2)
FichierNDX = fRep("")
FIN

fRep("")

// Pour finir, je remet à 0 le code spécial de façon à ce que le processus
// ne soit pas ré-exécuté ensuite
SauveParamètre("Systeme\Lesindex",0)
FIN
**************

Voilà ... le truc tout simple.
Une habitude que j'ai pris également depuis WD55 c'est, dans le code INIT du
projet, de modifier les attributs de tous les fichiers de la base de données
(FIC, NDX ou MMO) ainsi que celui des divers autres fichiers appelés à être
modifiés par le logiciel (DOC, TXT, INI, etc ...) de façon à faire sauter
l'attribut lecture seule et ne pas engendrer des erreurs de "droits
d'écriture".
J'ai trop souvent, par le passé, été confronté à des clients qui font des
copies de fichiers entre machine avec un CD ce qui, comme vous le savez,
active automatiquement l'attribut lecture seule des fichiers.

A+

Val
Posté le 01 février 2006 - 11:32
les deux dernières solutions sont assez interessantes. et si val peut partager avec nous son bout de code, personnellement j'y verrai plus clair encore. sinon que ce à quoi je pense maintenant, c'est d'intégrer à mon appli, le composant WDOptimiseur. comme ca j'aurai une option de menu pour le lancer à partir de l'interface utilisateur.
Tout autre apport est le bienvenu

--fahug
Posté le 01 février 2006 - 12:37
Aussi j'aimerais savoir pour la solution qui consiste à gérer manuellement la reindexation pour tous les fichiers avec jauge, comment gérer la progression du jauge avec la fonction hreindexe(). j'ai ajouté un superchamp dont je met le nom en paramètre dans Hreindexe comme cidessous mais ca ne marche pas:

HRéindexe(FACTURE,hNdxNormal,SCJauge.CH_JAUGE,hNdxNormal)
Posté le 01 février 2006 - 14:44
merci bien pour le code, c'est plus clair maintenant.
Posté le 01 février 2006 - 17:32
là je viens de le tester et il me supprime tous les fichiers .ndx y compris les fichiers journalidentification.ndx et JournalOperation.ndx
o démarrage de mon appli après la reindexation, j'ai un messaged'erreur me disant impossible d'ouvrir les fichiers cidessus. du coup je n'ai plus accès à mon appli.
une solution?
Posté le 01 février 2006 - 18:05
Bonjour

"fahugues" <fahugues@gmail.com> a écrit dans le message de news:
43e0d459$1@news.pcsoft.fr...



là je viens de le tester et il me supprime tous les fichiers .ndx y
compris les fichiers journalidentification.ndx et JournalOperation.ndx
o démarrage de mon appli après la reindexation, j'ai un messaged'erreur me
disant impossible d'ouvrir les fichiers cidessus. du coup je n'ai plus
accès à mon appli.
une solution?



Pour que cela marche ... il faut bien sur activer la réindexation des
fichiers pour le projet ... sinon cela ne marche pas, c'est évident.

Pour ce faire:
1) Menu déroulant "Projet"
2) Choix "Description du projet"
3) Section "Fichiers"

.... et là, dans la rubrique "Réindexation automatique", tu coches l'option
"activer la réindexation automatique" et, si tu le souhaites, tu coches
également l'option "Fenêtre de réindexation visible".

Ainsi, les fichiers index sont re-créés automatiquement par le "système" au
fur et à mesure des besoins.
Si tu as coché l'option "Fenêtre de réindexation visible", tu verras une
fenêtre te signalant l'opération en cours.

A+

Val