|
| Base de Données HFSQL - réindexation clé automatique |
| Iniciado por JVE, 03,feb. 2020 09:36 - 7 respuestas |
| |
| | | |
|
| |
Miembro registrado 48 mensajes |
|
| Publicado el 03,febrero 2020 - 09:36 |
Bonjour
Savez vous comment réindexer/réinitialiser la clé automatique d'un fichier d'une base HFSQL ? J'ai fait beaucoup de tests et avant de lancer l'application aux utilisateurs je souhaiterais faire le ménage sur cette clé (pour commencer à 1 par exemple)?
Merci pour votre aide |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 4.362 mensajes |
|
| Publicado el 03,febrero 2020 - 10:29 |
A part supprimer le fichier ? Tout repasser en ordre "chronologique" sans "trous" va mettre un beau bazar au niveau des relations Avec une PK GUID, le problème ne se pose plus.
-- Il y a peut être plus simple, mais, ça tourne |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 2.321 mensajes |
|
| Publicado el 04,febrero 2020 - 08:22 |
Bonjour,
Faire une fonction qui copie les données du fichier existant dans un Alias ?
-- Bon dev, Jean-Pierre |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 4.362 mensajes |
|
| Publicado el 04,febrero 2020 - 10:28 |
Jean-Pierre a écrit :
Faire une fonction qui copie les données du fichier existant dans un Alias ?
Et retrouver toutes les FK dans le reste de la base ? Le problème va se résoudre de lui même lors de l'installation. Les tables vont être recrées vides et les PK auto vont seront initialisées à 1
-- Il y a peut être plus simple, mais, ça tourne |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 2.321 mensajes |
|
| Publicado el 04,febrero 2020 - 18:37 |
Voroltinquo a écrit :
Jean-Pierre a écrit : Faire une fonction qui copie les données du fichier existant dans un Alias ?
Et retrouver toutes les FK dans le reste de la base ? Le problème va se résoudre de lui même lors de l'installation. Les tables vont être recrées vides et les PK auto vont seront initialisées à 1
-- Il y a peut être plus simple, mais, ça tourne
Désolé mais je ne suis pas Bac+6 en informatique… Que veut dire FK et PK ?
NB : la question initiale n'est pas claire : - soit il n'y a pas de données, et il suffit d'un hCreation ou hCreationSiInexistant comme tu l'indiques, - soit il y a des données à copier dans le projet et ma proposition est valable.
-- Bon dev, Jean-Pierre |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 4.362 mensajes |
|
| Publicado el 04,febrero 2020 - 19:13 |
PK : Primary Key FK : Foreign Key (c'est la rubrique qui sert de relation entre 2 tables)
Le problème est que si on modifie la PK (qui pointe sur d'autres enregistrements dans une autre table,) il faut rechercher tous les enregistrements reliés et modifierla FK en conséquence. Prenons le cas suivant :

Avec les responsables suivants : Toto (PK 3 ), Titi (PK 8 ) et Tata (PK 9.) Si on renumérote les PK (1,2 et 3,) les ateliers qui avaient Toto comme contacts (FK_Contact = 3) vont se voir affecter Tata. De même Toto et Titi n'auront plus d'ateliers, ou auront les ateliers du contact avec la PK 1 (resp 3)
-- Il y a peut être plus simple, mais, ça tourneMensaje modificado, 04,febrero 2020 - 19:14 |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 166 mensajes |
|
| Publicado el 04,febrero 2020 - 20:33 |
| |
| |
| | | |
|
| | |
| |
Miembro registrado 4.362 mensajes |
|
| Publicado el 05,febrero 2020 - 17:37 |
La petite procédure suivante devrait résoudre ton problème. Je n'ai pas fait les tests d'erreur pour chaque fonction, je te laisse un peu de boulot. Il y a de la propagation d'erreur à mettre en place
Procedure NettoyerTable()
SI PréparerTables()>1 ALORS Erreur(HErreurInfo) FIN Réaffecter() RetourModeNominal()
FONCTION PréparerTables():booléen
HFerme(Contact) HChangeNom(Contact,"NouveauContact") HCreation(Contact) HFerme(Contact)
HChangeNom(Contact,"Contact") HOuvre(Contact)
RENVOYER Vrai CAS ERREUR: RENVOYER HErreurInfo(hErrFichier) CAS EXCEPTION: RENVOYER HErreurInfo(hErrCodeSystème)
FONCTION Réaffecter():booléen NouveauContact est Source dede Données sCheminTable est une chaîne EnrContact est un Enregistrement de Contact
n8AncienFK est un entier sur 8 octets n8NouveauFK est entier sur 8
REQ_Réaffectation est une Requête SQL = [ UPDATE Atelier SET FK_Contact = {pNouveauContact} WHERE Atelier.FK_Contact = {pAncienContact} ]
sCheminTable=fConstruitChemin(fRepDonnées,"NouveauContact","fic") HDéclareExterne(sCheminTable,NouveauContact)
POUR TOUT Contact n8AncienFK=Contact.PK_Contact EnrContact=Contact NouveauContact=EnrContact HAjoute(NouveauContact) n8NouveauFK=NouveauContact.PK_Contact REQ_Réaffectation.pAncienContact=n8AncienFK REQ_Réaffectation.pNouveauContact=n8NouveauFK HExécuteRequête(REQ_Réaffectation) FIN
HFerme(NouveauContact) HAnnuleDéclaration(REQ_Réaffectation) HAnnuleDéclaration(NouveauContact)
RENVOYER Vrai
CAS ERREUR: CAS EXCEPTION:
FONCTION RetourModeNominal():booléen sCheminContact est une chaîne sCheminSwap est une chaîne
HFerme(Contact)
sCheminContact=fConstruitChemin(fRepDonnées,"Contact","*") fSupprime(sCheminContact) sCheminContact=fConstruitChemin(fRepDonnées,"Contact","FIC") sCheminSwap=fConstruitChemin(fRepDonnées,"NouveauContact","FIC") fRenomme(sCheminSwap,sCheminContact) sCheminSwap=fConstruitChemin(fRepDonnées,"NouveauContact","*") fSupprime(sCheminSwap)
HRéindexe(Contact,HVérifieMémo) HOuvre(Contact)
RENVOYER Vrai CAS ERREUR: CAS EXCEPTION:
-- Il y a peut être plus simple, mais, ça tourne |
| |
| |
| | | |
|
| | | | |
| | |
|