DOCUMENTATION EN LIGNE
DE WINDEVWEBDEV ET WINDEV MOBILE

Aide / WLangage / Gestion des bases de données / HFSQL / Fonctions HFSQL
  • Conditions d'utilisation
  • Ré-indexation automatique
  • Ré-indexation "à chaud"
  • Calcul des statistiques
  • Répertoire des fichiers temporaires
  • Gestion des alphabets non latins
  • Droits d'accès à la table
  • Cas particulier: Tables corrompues après reboot ou erreur fatale du poste
  • Versions précédentes
WINDEV
WindowsLinuxJavaEtats et RequêtesCode Utilisateur (MCU)
WEBDEV
WindowsLinuxPHPWEBDEV - Code Navigateur
WINDEV Mobile
AndroidWidget AndroidiPhone/iPadWidget IOSApple WatchMac Catalyst
Autres
Procédures stockées
Reconstruit l'index d'une table (table d'extension ".NDX"). Il est également possible de ré-indexer:
  • les index full-text (fichiers d'extension ".FTX"),
  • les index spatiaux (fichiers d'extension ".SDX").
La ré-indexation d'une table peut être effectuée même si des applications accèdent à cette table. Pour plus de détails, consultez les remarques.
Nouveauté SaaS
HFSQL Client/Serveur Les tables HFSQL Client/Serveur peuvent être réindexées de manière asynchrone grâce à la fonction HRéindexeAsynchrone.
Attention: Cette fonctionnalité est disponible uniquement à partir de WINDEV Suite SaaS 2025 Update 2.
Pour plus de détails, consultez Utiliser les nouveautés de WINDEV Suite SaaS 2025.
Rappel: La ré-indexation ré-organise les index et peut libérer l'espace laissé libre lors des suppressions d'enregistrements. Après ré-indexation, l'accès aux index est optimal. La ré-indexation peut être rendue nécessaire par la perte ou l'altération du fichier d'index. La fonction HVérifieIndex permet de vérifier régulièrement l'état du fichier d'index.
SI HRéindexe(UnFichier, hNdxNormal) = Vrai ALORS
	TableAffiche(TABLE_MaTable, taDébut)
FIN
Syntaxe
<Résultat> = HRéindexe([<Table> [, <Mode> [, <Jauge> [, <Taux de densité>]]]])
<Résultat> : Booléen
  • Vrai si la ré-indexation a été effectuée sans problème,
  • Faux dans le cas contraire. La fonction HErreur permet d'obtenir plus d'informations sur le problème rencontré.
<Table> : Chaîne de caractères optionnelle
Nom de la table manipulée.
Si ce nom n'est pas spécifié, la fonction HRéindexe va manipuler la dernière table utilisée par la dernière fonction de gestion HFSQL (fonction commençant par la lettre H).
<Mode> : Constante ou combinaison de constantes de type entier (optionnel)
Paramétrage de la ré-indexation:
hChangeAlphabetRé-indexation avec changement d'alphabet.
Le nouvel alphabet défini avec la fonction ChangeAlphabet sera pris en compte lors de la ré-indexation. Les tris, recherches, ... sur des clés de type chaîne (chaînes, caractères, date et heure) seront effectués selon cet alphabet.
hFTXRé-indexation des index full-text.
hMmoCompactageCompactage et défragmentation des fichiers de type "Mmo".

Attention: Cette constante ne peut pas être combinée avec les constantes hNdxCompactage, hVérifieMémo, hFTX, hSDX, hNdxNormal ou hNdxSuppression.
hNdxCompactageRé-indexation avec compactage: seuls les enregistrements actifs sont conservés. Tous les autres enregistrements sont définitivement supprimés. L'espace libéré par les suppressions est supprimé dans la table ".FIC" et dans l'index ".NDX".
Remarque: Si des enregistrements sont en transaction, le compactage est automatiquement désactivé.
hNdxMinimalRé-indexation ne prenant en compte que les clés corrompues. Ce paramètre est ignoré si les constantes hNdxSuppression ou hNdxCompactage sont activées.
hNdxMuetRé-indexation sans affichage.
hNdxNormal
(valeur par défaut)
Ré-indexation classique (avec statistiques et sans compactage).
Les statistiques permettent d'optimiser les requêtes et les filtres (voir Notes). Le calcul des statistiques prend en compte uniquement les enregistrements actifs.
hNdxSansStatRé-indexation sans calcul de statistiques. Cette constante permet d'obtenir un gain de place car les fichiers d'index seront moins importants.
Attention: Les statistiques sont très importantes pour obtenir des temps d'exécution corrects lors de l'utilisation de requêtes, de filtres avec condition et de vues avec condition.
hNdxSuppressionRé-indexation avec suppression des enregistrements endommagés.
hSDXRé-indexation des index spatiaux.
hTâcheDeFond
HFSQL Client/Serveur Ré-indexation effectuée en tâche de fond. Les applications ne sont pas bloquées pendant la ré-indexation.
Cette fonctionnalité est disponible uniquement en mode Client/Serveur.
hVérifieMémoRé-indexation normale avec vérification des mémos et correction si nécessaire (permet de récupérer une partie des mémos endommagés).
WINDEVWEBDEV - Code Serveur Remarque: Avant de faire une réindexation des mémos, il est possible de vérifier régulièrement l'état des mémos grâce à la fonction HVérifieMémo.
<Jauge> : Nom de fenêtre, nom de champ ou entier optionnel
  • Nom de la fenêtre dans laquelle la jauge doit être affichée,
  • Nom du champ de type Jauge affichant la progression de la réindexation,
  • Identifiant (Handle) de la fenêtre qui affiche la jauge.
WEBDEV - Code Serveur Ce paramètre est ignoré.
<Taux de densité> : Entier compris entre 1 et 100
Taux de remplissage des index. Par défaut, ce taux a pour valeur 60.
Plus ce taux est important, plus l'index est dense et de petite taille. Dans ce cas, les parcours, recherches, filtres et requêtes seront plus rapides. Les ajouts d'enregistrements et les modifications d'enregistrements pourront être ralentis.
Plus ce taux est faible, moins l'index sera dense et plus sa taille sera importante. Dans ce cas, les parcours, recherches, filtres et requêtes seront ralentis. Les ajouts d'enregistrements et les modifications d'enregistrements seront plus rapides.
Attention: ce paramètre est utilisable uniquement sur les tables au format HFSQL.
Hyper File 5.5 Ce paramètre n'est pas utilisable.
Remarques

Conditions d'utilisation

  • La fonction HRéindexe permet de ré-indexer un fichier xBase.
  • La fonction HRéindexe permet de réindexer les tables d'un cluster. Dans ce cas:
    • La réindexation est effectuée sur le noeud auquel l'utilisateur est connecté.
    • Seule une réindexation à chaud est disponible (constante hTâcheDeFond).
WINDEVWEBDEV - Code ServeurEtats et RequêtesiPhone/iPadCode Utilisateur (MCU)Langage ExterneAjaxHFSQL ClassicHFSQL Client/Serveur

Ré-indexation automatique

La ré-indexation d'une table peut être rendue nécessaire par la perte ou l'altération du fichier d'index. Une ré-indexation automatique des tables peut être mise en place.
Pour mettre en place la ré-indexation automatique, il faut:
  • configurer la valeur de la variable H.LimiteRéindexationAutomatique.
    En effet, si la table contient moins de H.LimiteRéindexationAutomatique enregistrements, la ré-indexation est automatique en cas d'erreur d'index.
    Par défaut, la variable H.LimiteRéindexationAutomatique vaut 100000. Si cette variable vaut 0, la ré-indexation automatique est désactivée.
  • configurer la valeur de la variable H.RéindexationAutomatiqueVisible.
    En effet, si cette variable vaut Vrai (valeur par défaut), une fenêtre est automatiquement affichée tant que la ré-indexation automatique n'est pas terminée. Cette fenêtre contient une jauge permettant de suivre la ré-indexation en cours. Cette fenêtre est personnalisable. Pour plus de détails, consultez Gestion assistée des erreurs HFSQL.
    Pendant la ré-indexation, les différentes applications manipulant les données de la table (lecture ou écriture d'enregistrements) seront temporairement arrêtées jusqu'à la fin de la ré-indexation.
    HFSQL Client/Serveur Si la constante hTâcheDeFond est utilisée, la ré-indexation est effectuée en tâche de fond et les applications utilisant la table ne seront pas arrêtées.
Si une erreur est rencontrée pendant la ré-indexation automatique (par exemple lors d'une erreur de blocage sur la table ou sur l'enregistrement), la ré-indexation automatique est arrêtée et une erreur fatale d'index corrompu est affichée. Ce fonctionnement est identique au fonctionnement sans ré-indexation automatique.
Remarques:
  • Lors de la ré-indexation automatique, la ré-indexation est effectuée en mode normal (constante hNdxNormal).
  • La ré-indexation automatique n'est pas disponible sur les tables au format Hyper File 5.5.
  • Si une ré-indexation automatique est effectuée, les applications utilisant les tables en cours de ré-indexation sont temporairement bloquées. Un message est affiché indiquant que la table est en cours de maintenance.
  • A la fin de la ré-indexation, le contexte HFSQL en cours est automatiquement rétabli (sauf si une ré-indexation avec vérification des mémos a été effectuée).
WINDEVWEBDEV - Code ServeurEtats et RequêtesAndroidWidget AndroidiPhone/iPadJavaCode Utilisateur (MCU)AjaxHFSQL ClassicHFSQL Client/Serveur

Ré-indexation "à chaud"

La ré-indexation d'une table peut être effectuée même si des applications accèdent à cette table.
Pendant la ré-indexation, les différentes applications manipulant les données de la table (lecture ou écriture d'enregistrements) seront temporairement arrêtées/bloquées jusqu'à la fin de la ré-indexation.
WINDEV Une fenêtre apparaît indiquant que la table est en cours de ré-indexation (appelée aussi réorganisation). Cette fenêtre est affichée pendant toute la durée de la ré-indexation et ne peut être fermée. Une jauge de progression indique l'état de la ré-indexation.
Il est possible de personnaliser cette fenêtre et/ou de ne plus l'afficher. Pour plus de détails, consultez Gestion assistée des erreurs HFSQL.
Pour éviter les effets de clignotement, la fenêtre de ré-indexation s'affiche uniquement si la ré-indexation risque de durer plus de 2 secondes. Dans ce cas, cette fenêtre apparaît au bout de 0.7 secondes.
Remarque: la ré-indexation "à chaud" ne peut pas être effectuée si des enregistrements sont bloqués en lecture/écriture dans la table à ré-indexer. Si les enregistrements sont uniquement bloqués en écriture, la ré-indexation à chaud peut être effectuée.
HFSQL Client/Serveur Si la constante hTâcheDeFond est utilisée, la ré-indexation est effectuée en tâche de fond et les applications utilisant la table ne seront pas arrêtées.

Calcul des statistiques

Le calcul des statistiques permet d'optimiser les requêtes et les filtres sur la table. Ce calcul prend en compte uniquement les enregistrements actifs. Ce calcul peut également être obtenu par la fonction HStatCalcule.
Remarque: Pour que le calcul des statistiques soit efficace, il est nécessaire de réaliser ce calcul sur toutes les tables (par exemple dans le cas d'une requête multitable).

Répertoire des fichiers temporaires

Pendant la ré-indexation, des fichiers temporaires peuvent être créés. Par défaut, ces fichiers sont créés dans le répertoire temporaire de Windows ou dans le répertoire courant si il n'y a pas assez de place.
La variable H.RépertoireTemporaire permet de paramétrer le répertoire utilisé pour stocker ces fichiers temporaires. Cette variable est conseillée notamment lors de la ré-indexation de tables de taille très importante.
HFSQL Client/Serveur Le répertoire utilisé pour stocker les fichiers temporaires sur le serveur peut être défini:

Gestion des alphabets non latins

Pour modifier l'alphabet utilisé pour les recherches, les tris:
  1. Spécifiez l'alphabet à utiliser avec la fonction ChangeAlphabet.
  2. Ré-indexez la table avec la fonction HRéindexe. Utilisez la constante hChangeAlphabet pour prendre en compte l'alphabet spécifié avec la fonction ChangeAlphabet.
Pour plus de détails sur la gestion des alphabets non latins dans les tables, consultez Gérer des alphabets spécifiques dans des tables.

Droits d'accès à la table

La ré-indexation provoque la recréation de la table sur disque. Dans un système d'allocation gérant les droits au niveau des tables (NTFS, etc.), la table après ré-indexation aura donc les droits du répertoire auquel elle appartient.
Si avant la ré-indexation, la table avait des droits particuliers différents de ceux du dossier, il est nécessaire de les redéfinir au niveau de Windows après la ré-indexation.

Cas particulier: Tables corrompues après reboot ou erreur fatale du poste

Lors d'un redémarrage inopiné du poste, les tables peuvent être corrompues. Dans ce cas, les tables contiennent des données qui ne correspondent à rien (par exemple caractères illisibles dans les données). Pour corriger ce problème:
  1. Effectuez une ré-indexation avec suppression.
  2. Libérez les enregistrements en transaction avec la fonction HTransactionLibère.
  3. Supprimez les enregistrements incorrects à l'aide de WDMAP.
WINDEV

Versions précédentes

Cette fonction remplace la fonction HRéindexe_55, conservée par compatibilité avec WINDEV 5.5.
Classification Métier / UI: Code métier
Composante: wd300hf.dll
Version minimum requise
  • Version 9
Documentation également disponible pour…
Commentaires
Cliquez sur [Ajouter] pour publier un commentaire

Dernière modification : 28/03/2025

Signaler une erreur ou faire une suggestion | Aide en ligne locale