Bonjour,
Je suis confronté à un problème assez surprenant.
Développement en VBA dans une application frontale utilisant les données d'une base "dorsale" dont les tables sont attachées.
Dans le cas présent j'exécute une suite d'instructions SQL à partir des commandes VBA "DataBase.execute()". L'ensemble des commandes est encadré par une transaction déclarée au niveau du WorkSpace.
Pour résumer (je vous fournirai ultérieurement un code plus précis si nécessaire) voici le schéma d'exécution des actions sous forme d'un exemple.
Soit ma table Lignes(IdLigne numéroAuto, Intitulé string(50), Valeur long)
Cette table comporte des lignes dont la dernière à la valeur IdLigne = 50.
-1-
Je copie dans une table temporaire (TMP) les lignes IdLigne = 10,11 et 12 .
-2-
j'ouvre la transaction
-3-
Je supprime les lignes que j'ai copiées dans ma table temporaire
-4-
J'insère les lignes de la table temporaire qui ont conservé leur identifiant IdLigne initial avec une instruction de la forme :
-5-
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 insert into Lignes(IdLigne, Intitulé , valeur) select IdLigne, Intitulé, valeur from TMP where IdLigne is not null;
J'insère de nouvelles lignes qui ont été saisie sur la table temporaire et dont la colonne IdLigne n'est pas définie
Cette instruction Insert provoque une erreur de doublons.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 insert into Lignes(Intitulé , valeur) select Intitulé, valeur from TMP where IdLigne is null;
Plus étonnant, je constate que si j'essaie de saisir directement dans la table Lignes une nouvelle ligne, le numéro Idligne prend la valeur 13, soit la prochaine valeur suivant l'insertion -4- des lignes qui avaient un numéro forcé!
Bon, bien sûr, je n'ai qu'à faire un update pour - à priori - résoudre le problème; mais quand-même il ne me semble pas normal que le numéro auto de la table soit déterminé par la valeur de la dernière ligne introduite comportant une valeur pour cette colonne…
Je précise que j'ai compacté plusieurs fois ma base avant de tirer mes conclusions.
Si vous avez une explication sur ce problème, voir mieux une solution, je suis preneur car il n'est pas impossible que j'ai utilisé une méthode similaire dans plusieurs de mes applications.
Merci.
Partager