Bonjour,
J'ai un petit soucis sur une base Access.
Soit 2 tables A et B en relation 1 à plusieurs. Je veux ajouter en même temps des données dans A et dans B pour que tout soit enregistré ou rien du tout. Je ne veux pas enregistrer sur A s'il n'existe aucune donnée liée en B, les données de B étant liées à un enregistrement de A et l'index de A est autoincrémenté.
Dans une feuille j'ai mon dataset avec mes 2 tables.
Je crée un enregistrement A par un bouton Ajouter (NewRow sur table A).
Je récupère l'index de l'enregistrement (exemple: 3)
Je crée mes enregistrements B en y inscrivant l'index récupéré (3) dans le champ qui va bien.
avant la sauvegarde dans la base, j'ajoute mon enregistrement dans A avec AddRow et les enregistrements dans B
Je fais mes update, tout va bien, les enregistrements de B sont bien liés à l'enregistrement A3 et sauvegardés dans la base.
Si en cours de saisie, l'utilisateur crée un enregistrement sur la table A (N°4 par exemple) puis clique sur annuler (erreur ou autre...), je fais une suppression de la ligne qui vient d'etre crée (Row.delete). L'utilisateur clique de nouveau sur Ajouter, un nouvel enregistrement est créé, je récupère l'index (N°5). On ajoute des enregistrements à la table B (avec 5 comme index lié).
Le probleme apparait quand je fais l'update. L'update enregistre le N°5 en N°4 et dans ce cas ne veut pas enregistrer la table B car aucun enregistrement avec l'index 5 n'existe dans A.
J'ai essayé de faire un Fill sur la table, de faire un reject change, un accept change...
La création d'un enregisterement après un clic sur annuler, fait toujours sauter l'index de 1.
Si je ferme la feuille et la rouvre, je retrouve l'index suivant normal
Donc comment sans fermer la feuille, retrouver le premier index supérieur au celui qui existe dans la base apres un ajout et une suppresion d'une ligne dans la table?
Qui gère (ou génère) l'index créé quand on fait un addrow ? (car un fill sans update avant, ne remet pas les index à jour) ?
Merci de vos réponses.
Eric
Partager