Vous êtes sur la page 1sur 10

FONCTIONS DE

GESTION DE BASE DE
DONNEES
LES FONCTIONS DE
SUPPRESSION LOGIQUE OU
PHYSIQUE
D'ENREGISTREMENT

HSupprime (Fonction)
En anglais : HDelete
Supprime un enregistrement d'un fichier de donnes (d'une requte ou d'une vue). L'enregistrement est supprim logiquement et
physiquement. Il ne pourra pas tre restaur (contrairement aux enregistrements rays avec la fonction HRaye).
Les oprations effectues sont les suivantes :

l'enregistrement est supprim : l'enregistrement est rendu inactif et il n'est plus rfrenc dans l'index. Les donnes ne sont pas
conserves.

les index (correspondant aux cls de l'enregistrement) sont supprims du fichier d'index.
les mmos associs l'enregistrement sont supprims du fichier de mmo.
Aprs l'excution de la fonction HSupprime, l'enregistrement est insr dans la liste des enregistrements supprims du fichier de
donnes et sera r-utilis par la fonction HAjoute.
L'enregistrement supprim n'est plus visible par le parcours sur la rubrique courante. Cet enregistrement ne sera plus visible
pour les parcours sur les autres rubriques uniquement aprs r-initialisation de ces parcours.
WinDev, WinDev Mobile et WebDev proposent une gestion automatique des erreurs pour les 5 types d'erreur suivants : Erreur de
doublons, Erreur d'intgrit, Erreur de mot de passe, Erreur de conflit de modification et d'tat lors du conflit de modification,
Erreur de blocage. Pour plus de dtails, consultez Gestion assiste des erreurs HFSQL.
Remarque : Pour supprimer tous les enregistrements d'un fichier de donnes, utilisez la fonction HSupprimeTout.

Remarque : A partir de la version 19, HFSQL est le nouveau nom de HyperFileSQL.

Exemple

// Supprime l'enregistrement numro 123


HSupprime(Client, 123)
// Suppression des commandes d'un client
HLitRecherchePremier(COMMANDE, NUMCLI, ValNumCli)
TANTQUE HTrouve() = Vrai
HSupprime()
HLitSuivant()
FIN
// Suppression des commandes d'un client
POUR TOUT COMMANDE AVEC NUMCLI = ValNumCli
HSupprime()
FIN

Syntaxe
<Rsultat> = HSupprime([<Nom du fichier> [, <Numro d'enregistrement> [, <Options>]]])

<Rsultat> : Boolen

Vrai si l'enregistrement a t supprim,


Faux en cas de problme (enregistrement bloqu, etc. (voir cas particuliers)). La fonction HErreurInfo permet d'identifier l'erreur.
Si l'enregistrement supprimer est dj supprim, la fonction HSupprime renvoie Vrai.
<Nom du fichier> : Chane de caractres optionnelle (avec ou sans guillemets)
Nom du fichier de donnes HFSQL ou de la vue manipul. Si ce paramtre correspond une chane vide (""), la fonction
HSupprime manipule le dernier fichier de donnes utilis par la dernire fonction de gestion HFSQL (fonction commenant par

la lettre H).
<Numro d'enregistrement> : Entier optionnel
Numro de l'enregistrement supprimer. Si ce paramtre n'est pas prcis (est gal 0 ou la constante hNumEnrEnCours),
l'enregistrement en cours sera supprim. Cependant, l'enregistrement en cours restera l'enregistrement supprim.

ATTENTION : Il ne faut pas confondre le numro d'enregistrement avec l'identifiant automatique associ
l'enregistrement.
Dans une utilisation normale, ces deux numros ne sont pas identiques. Le numro d'enregistrement peut tre connu par la
fonction HNumEnr.
Ce paramtre doit obligatoirement correspondre au numro de l'enregistrement en cours (constante hNumEnrEnCours).
<Options> : Constante optionnelle
Paramtre la gestion de l'intgrit ralise sur l'enregistrement supprim.

hIgnoreIntgrit

Ignore le contrle d'intgrit sur cette opration, mme si le contrle de l'intgrit


automatique est branch (fonction HGreIntgrit)

Remarques

Manipulations d'un enregistrement supprim

Un enregistrement supprim ne sera lu :

ni par les fonctions de parcours : HPremier, HDernier, HSuivant, HPrcdent, HLitPremier, HLitDernier, HLitSuivant,
HLitPrcdent, HAvance, HRecule.

ni par les fonctions de recherche : HRecherchePremier, HLitRecherchePremier, HRechercheDernier, HLitRechercheDernier.

Un enregistrement supprim pourra tre consult grce la fonction HLit. Son contenu sera incohrent.

Un enregistrement supprim pourra tre ractiv grce aux fonctions HModifie ou HEcrit.
L'emplacement physique d'un enregistrement supprim sera rutilisable immdiatement par la fonction HAjoute par exemple.

Nombre d'enregistrements supprims


La fonction HNbEnr permet de connatre le nombre d'enregistrements supprims dans le fichier de donnes.
Remarque : Par compatibilit avec Hyper File 5.5, il est aussi possible de connatre le nombre d'enregistrements supprims grce
la variable H.NbSup.
Suppression d'un enregistrement partir d'une requte
La suppression d'un enregistrement dans une requte peut tre effectue :

soit uniquement dans le rsultat de la requte

soit directement dans les fichiers de donnes manipuls par la requte (constante hModifieFichier utilise dans les fonctions
HExcuteRequte ou HExcuteRequteSQL). Dans ce cas, la constante hAvecFiltre est automatiquement slectionne.
Quel que soit le mode d'excution de la requte (avec ou sans la constante hAvecFiltre), la fonction HSupprime n'est utilisable
que sur les requtes mono-fichier.
Attention :

Sur des fichiers de donnes non HFSQL, il est inutile de prciser la constante hModifieFichier dans les fonctions
HExcuteRequte ou HExcuteRequteSQL : les fichiers de donnes intervenant dans la requte sont automatiquement modifis
lors de la modification du rsultat de la requte.

Il est impossible de supprimer un enregistrement dans une requte utilisant les groupes ou les agrgats.

La gestion de l'intgrit et des doublons n'est pas ralise lors d'oprations sur les requtes multi-fichiers : il est conseill d'utiliser
les transactions pour viter tout problme.
Pour plus de dtails, consultez Modifier le contenu d'une requte.

Version du fichier de donnes


En cas de succs de la fonction HSupprime, le numro de version du fichier de donnes est modifi. Ce numro de version est
donn par la fonction HVersion.

Taille du fichier de donnes


La suppression d'un ou plusieurs enregistrements n'a pas d'incidence sur la taille totale du fichier de donnes sur disque. Les
emplacements laisss libres dans le fichier de donnes par les suppressions seront rutiliss lors des prochains ajouts
d'enregistrements (fonction HAjoute). Cette fonctionnalit permet d'obtenir de meilleurs performances, la rduction de la taille
d'un fichier de donnes tant souvent coteuse en temps.
Cependant, si aprs de nombreuses suppressions, il est ncessaire de rduire la taille d'un fichier de donnes, il est possible de le
re-indexer (via la fonction HRindexe, l'outil WDMap ou le Centre de Contrle HFSQL).

Suppression et blocage
Si un problme de blocage apparat lors de la "suppression" d'un enregistrement (tentative de suppression d'un enregistrement
bloqu en criture par exemple), l'enregistrement n'est pas supprim et la fonction HErreurBlocage renvoie Vrai.

xBase / FoxFro
La fonction HSupprime a le mme effet que la fonction HRaye : l'enregistrement est ray et non supprim. L'enregistrement peut
donc tre ractiv par la fonction HModifie. Dans ce cas, la fonction HEtat renvoie la constante hEtatRaye sur un enregistrement
supprim (et non la constante hEtatSup).
Pour supprimer physiquement les enregistrements rays, il faut utiliser la fonction HRindexe.
Fichiers FoxPro : La fonction HRindexe n'est pas disponible

HRaye (Fonction)
En anglais : HCross
Raye un enregistrement d'un fichier de donnes. L'enregistrement est supprim logiquement et pourra ventuellement tre rcupr.
Les oprations effectues sont les suivantes :

l'enregistrement est rendu inactif. Les donnes sont conserves (ce qui n'est pas le cas lors de la suppression d'un enregistrement
avec la fonction HSupprime).

les index (correspondant aux cls de l'enregistrement) sont supprims du fichier d'index.
les mmos associs l'enregistrement sont conservs.
Cette fonction peut tre utilise indiffremment avec les fichiers de donnes, les vues HFSQL Mobile ou les requtes.

Nouveaut 20
Cette fonction est dsormais disponible pour les applications Android (pour les fichiers de donnes HFSQL).
Cette fonction est dsormais disponible en mode Widget Android (pour les fichiers de donnes HFSQL).
Exemple
// Raye l'enregistrement numro 123
HRaye(Client, 123)
// Suppression (rayure) des commandes d'un client
HLitRecherchePremier(COMMANDE, NUMCLI, ValNumCli)
TANTQUE HTrouve() = Vrai
HRaye()
HLitSuivant()
FIN

Syntaxe
<Rsultat> = HRaye([<Nom du fichier> [, <Numro d'enregistrement> [, <Options>]]])

<Rsultat> : Boolen

Vrai si l'enregistrement a t ray,

Faux en cas d'erreur (enregistrement bloqu, problme d'intgrit, ...). La fonction HErreurInfo permet d'obtenir plus de dtails.
<Nom du fichier> : Chane de caractres optionnelle (avec ou sans guillemets)
Nom du fichier de donnes HFSQL, de la requte ou de la vue manipul.
Si ce paramtre correspond une chane vide (""), la fonction HRaye manipule le dernier fichier de donnes utilis par la dernire
fonction de gestion HFSQL (fonction commenant par la lettre H).
<Numro d'enregistrement> : Entier optionnel
Numro de l'enregistrement rayer.
Si ce paramtre n'est pas prcis (est gal 0 ou la constante hNumEnrEnCours), l'enregistrement en cours sera ray.
<Options> : Constante optionnelle
Paramtre :

le blocage de l'enregistrement ray. Si aucune constante de blocage n'est spcifie, l'enregistrement ray n'est pas bloqu.

hBlocageNon
(valeur par dfaut)

Aucun blocage : l'enregistrement ray ne sera pas bloqu.

hBlocageEcriture

Blocage en criture : l'enregistrement ray en cours pourra tre lu et


consult (fonction HLit) par une autre application mais ne pourra pas tre
r-activ par une autre application. Seule l'application en cours pourra le ractiver.

hBlocageLectureEcriture

Blocage en lecture/criture : l'enregistrement ray en cours ne pourra ni tre


consult ni tre r-activ par une autre application.

La gestion des blocages est ralise uniquement sur les fichiers de donnes HFSQL Client/Serveur ou manipuls par un Accs
Natif. Il n'est pas possible de bloquer un enregistrement HFSQL Mobile. En effet, le systme d'exploitation du Pocket PC ne permet
pas de bloquer des enregistrements.

la gestion de l'intgrit sur l'enregistrement ray.

hIgnoreIntgrit

Ignore le contrle d'intgrit sur cette opration, mme si le contrle de


l'intgrit automatique est branch (fonction HGreIntgrit).

hVrifieIntgrit

Contrle l'intgrit de l'opration mme si le contrle de l'intgrit


automatique est dbranch (fonction HGreIntgrit).

Si les deux constantes sont utilises en mme temps, une erreur WLangage est gnre. Ces constantes n'ont pas d'effet sur la
suppression en cascade.
Remarques
Manipulations d'un enregistrement ray

Un enregistrement ray ne sera lu :

ni par les fonctions de parcours : HPremier, HDernier, HSuivant, HPrcdent, HLitPremier, HLitDernier, HLitSuivant,
HLitPrcdent, HAvance, HRecule

ni par les fonctions de recherche : HRecherchePremier, HLitRecherchePremier, HRechercheDernier, HLitRechercheDernier.

Un enregistrement ray pourra tre consult grce la fonction HLit.

Un enregistrement ray pourra tre ractiv grce aux fonctions HModifie ou HEcrit.

La fonction HEtat permet de connatre l'tat d'un enregistrement (actif, ray, supprim, ...).

L'emplacement physique d'un enregistrement ray ne sera rutilisable (par la fonction HAjoute par exemple) qu'aprs :

soit l'excution de la fonction HLibre,


soit une rindexation (avec compactage).
Nombre d'enregistrements rays
La fonction HNbEnr permet de connatre le nombre d'enregistrements rays dans le fichier de donnes.
Remarque : Par compatibilit avec WebDev 1.5 / WinDev 5.5, il est aussi possible de connatre le nombre d'enregistrements rays
grce la variable h.NbSup.
Version du fichier de donnes
En cas de succs de la fonction HRaye, le numro de version du fichier de donnes est modifi. Ce numro de version est donn par
la fonction HVersion.
Rayer un enregistrement partir d'une requte

Il est possible de rayer un enregistrement :

soit uniquement dans le rsultat de la requte.

soit directement dans les fichiers manipuls par la requte (constante HModifieFichier utilise dans les fonctions HExcuteRequte
ou HExcuteRequteSQL). Dans ce cas, la constante hAvecFiltre est automatiquement slectionne.
Quel que soit le mode d'excution de la requte (avec ou sans la constante hAvecFiltre), la fonction HRaye n'est utilisable que sur
les requtes mono-fichier.
Attention :

Il est impossible de rayer un enregistrement dans une requte utilisant les groupes ou les agrgats.

La gestion de l'intgrit et des doublons n'est pas ralise lors d'oprations sur les requtes multi-fichiers : il est conseill d'utiliser
les transactions pour viter tout problme.
Cas particuliers

Gestion des blocages :


Si un problme de blocage apparat lors de la "rayure" d'un enregistrement (tentative de rayure d'un enregistrement bloqu en
criture par exemple), l'enregistrement n'est pas modifi et la fonction HErreurBlocage renvoie Vrai.
Aucune gestion des blocages n'est ralise. En effet, le systme d'exploitation du Pocket PC ne permet pas de bloquer des
enregistrements.

Gestion de l'intgrit rfrentielle


Si la gestion de l'intgrit rfrentielle est active (fonction HGreIntgrit), et si l'intgrit n'est pas vrifie lors de la suppression, la
fonction HRaye n'est pas excute. Il est ncessaire de tester la fonction HErreurIntgrit aprs la fonction HRaye.

Enregistrements supprims
La fonction HRaye ne doit pas tre appele sur un enregistrement prcdemment supprim.

Fichiers xBase
La fonction HSupprime a le mme effet que la fonction HRaye : l'enregistrement est ray et non supprim. L'enregistrement peut
donc tre ractiv par la fonction HModifie. Dans ce cas, la fonction HEtat renvoie la constante hEtatRaye sur un enregistrement
supprim (et non la constante hEtatSup).

HLibre (Fonction)
En anglais : HFree
Transforme les enregistrements rays (fonction HRaye) d'un fichier de donnes en enregistrements supprims. La place occupe
par les enregistrements rays est ainsi libre et pourra tre rutilise lors des prochains ajouts (fonction HAjoute).
Rappel : Un enregistrement ray est inactif et disparat de l'index. Les donnes de cet enregistrement ray ne sont pas supprimes
(contrairement la fonction HSupprime).
Cette fonction est dsormais disponible pour les applications Android (pour les fichiers de donnes HFSQL).
Cette fonction est dsormais disponible en mode Widget Android (pour les fichiers de donnes HFSQL).
Exemple
// Supprime tous les enregistrements rays du fichier "Client"
HLibre (Client)
Syntaxe
<Rsultat> = HLibre([<Nom du fichier>])
<Rsultat> : Boolen

Vrai si l'enregistrement a t supprim,


Faux en cas de problme : l'enregistrement n'est pas supprim. La fonction HErreur permet d'identifier l'erreur.

<Nom du fichier> : Chane de caractres optionnelle (avec ou sans guillemets)


Nom du fichier de donnes manipul. Si ce nom n'est pas spcifi, la fonction HLibre va manipuler le dernier fichier de donnes
utilis par la dernire fonction de gestion HFSQL (fonction commenant par la lettre H).
Remarques
Cette fonction n'est pas adapte des fichiers xBase.

HSupprimeTout (Fonction)
En anglais : HDeleteAll
Supprime tous les enregistrements d'un fichier de donnes, d'une vue HFSQL ou d'une requte. Les enregistrements sont
supprims logiquement et physiquement. Ils ne pourront pas tre restaurs.
Les oprations effectues sont les suivantes :

les enregistrements sont supprims : les enregistrements ne sont plus rfrencs dans l'index. Les donnes ne sont pas conserves.

les index (correspondant aux cls des enregistrement) sont supprims du fichier d'index.

les mmos associs aux enregistrements sont supprims du fichier de mmo.


les identifiants automatiques sont r-initialiss.
Attention : l'intgrit n'est pas contrle.
WinDev, WinDev Mobile et WebDev proposent une gestion automatique des erreurs pour les 5 types d'erreur suivants : Erreur de
doublons, Erreur d'intgrit, Erreur de mot de passe, Erreur de conflit de modification et d'tat lors du conflit de modification,
Erreur de blocage. Pour plus de dtails, consultez Gestion assiste des erreurs HFSQL.

Cette fonction est disponible uniquement pour les fichiers de donnes ou les requtes lies une connexion HFSQL
(Classic ou Client/Serveur).
Exemple
// Vide le fichier sans le recrer
HSupprimeTout(Client)

Syntaxe
<Rsultat> = HSupprimeTout(<Nom du fichier>)

<Rsultat> : Boolen

Vrai si les enregistrements ont t supprims,

Faux en cas de problme (enregistrement bloqu, enregistrement en transaction, ...). La fonction HErreurInfo permet d'identifier
l'erreur.
<Nom du fichier> : Chane de caractres (avec ou sans guillemets)
Nom du fichier de donnes HFSQL, de la vue HFSQL ou de la requte manipul.
Remarques
Suppression des enregistrements d'une requte
Si la requte a t cre en utilisant la constante hModifieFichier, la fonction HSupprimeTout supprime les enregistrements dans
la source de la requte.
Suppression des enregistrements d'une vue HFSQL
La fonction HSupprimeTout supprime les enregistrements de la vue mais pas les enregistrements du fichier de donnes utilis
pour la vue.
Suppression des enregistrements dans une transaction
La fonction HSupprimeTout ne supprime pas les enregistrements prsents dans une transaction (annule ou valide).
Avantage par rapport un parcours de suppression des enregistrements
Pour supprimer les enregistrements d'un fichier de donnes, il est galement possible de raliser une boucle de suppression des
enregistrements (fonction HSupprime). Par exemple :

POUR TOUT NumCli DE Commande


HSupprime()
FIN

L'utilisation de la fonction HSupprimeTout prsente les avantages suivants :

le traitement est plus rapide


la taille du fichier de donnes vide est plus petite.
Avantage par rapport l'utilisation de la fonction HCration
Pour supprimer les enregistrements d'un fichier de donnes, il est galement possible d'utiliser la fonction HCration.
L'utilisation de la fonction HSupprimeTout prsente les avantages suivants :

Suppression possible mme si des utilisateurs sont connects au fichier de donnes.

Gestion automatique des erreurs HFSQL.