Bonjour ,
J'ai importé dans une base de données HFSQL des tables d'une base MySQL en les convertissant via l'assistant.
Le champ servant d'index à ces tables ayant été importé en tant que champ numérique je l'ai modifié en champ auto incrémenté.
Le problème rencontré est que la numérotation automatique recommence à 1 au lieu de poursuivre .
La solution que j'ai trouvée est de rechercher la valeur maximale de mon index , de faire un enregistrement forcé de cet index après l'avoir incrémenté et enfin de supprimer cet enregistrement .
je souhaite avoir votre avis sur la méthode choisie ainsi que sur sa mise en oeuvre
et , question subsidiaire ( en fait la vraie question) : j'utilise ce procédé ( recherche de la valeur maximale de l'index ) pour récupérer l'index d'un enregistrement que je viens d'ajouter ( je n'ai pas trouvé d'équivalent à la commande mysql SELECT LAST_INSERT_ID ).
J'ai essayé , ainsi qu'inscrit dans l'aide la syntaxemais la commandeLors de l'exécution d'une requête de type INSERT sur des fichiers de données HFSQL, il est possible de connaître l'identifiant automatique attribué au nouvel enregistrement grâce à la syntaxe <Nom Fichier>.<Nom Rubrique Identifiant automatique>.me renvoie systématiquement 0; et si je fais un select etc j'ai tous les index.
Code : Sélectionner tout - Visualiser dans une fenêtre à part Info(Titre.CODE_TITRE)
Donc ma vraie question est : quelle est la bonne méthode pour récupérer l'index d'un nouvel enregistrement que l'on vient de créer ?
Voici le code décrit plus haut pour mettre à jour l'index auto incrémenté
EDIT : j'ai mis à jour le code à la lumière de mes récents progrès![]()
Merci de m'avoir lu , et merci pour vos réponses
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 PROCEDURE Maj_Incremant(sFichier,sRubrique) //on récupère l'index le plus élevé nID est un entier SD est une Source de Données sSQL est une chaîne = ChaîneConstruit("SELECT MAX(%1)FROM %2;",sRubrique,sFichier) SI PAS HExécuteRequêteSQL(SD,gConnexionBase,hVérifieDoublon+hVérifieIntégrité,sSQL) ALORS Erreur(ErreurInfo) RETOUR FIN POUR TOUT SD nID = HRécupèreEnregistrement( SD ) FIN HLibère(SD) //on implémente le dernier index, on crée un enregistrement en forçant cet index avant de le supprimer //et on lit le last id pour controler nID ++ sSQL = ChaîneConstruit("INSERT INTO %1 (%2) values (%3);DELETE FROM %1 WHERE %2 = %3;select last_insert_id () FROM %1 LIMIT 1;",sFichier,sRubrique,nID) SI PAS HExécuteRequêteSQL(SD,gConnexionBase,hRequêteSansCorrection,sSQL) ALORS Erreur(ErreurInfo) RETOUR SINON POUR TOUT SD nID = HRécupèreEnregistrement( SD ) FIN HLibère(SD) Info (ChaîneConstruit("l'ID de la table %1 a été mis à jour (%2)",sFichier,nID)) FIN RETOUR
T.Chatenet






Répondre avec citation





Partager