Jean Sympa a écrit :

Bonjour à toutes et à tous,


Base Anomalie du dernier enregistrement


Quand j'ai enregistré le dernier enregistrement, j'ai eu une erreur. J'ai pensé à tort que l'enregistrement n'avait pas eu lieu. Or, l'enregistrement, est présent dans la table correspondante avec le numéro 23. Mais, il est absent dans le formulaire où le dernier enregistrement porte le numéro 22.

Bonjour Jean,

Qu'est-ce qui te fait dire qu'il est absent dans le formulaire ? Comment as-tu vérifié qu'il l'était effectivement ?

As-tu bien procédé à une vérification autre que sur le simple numéro, afin de vérifier qu'il avait bien une cohérence entre ce que tu voyais et ce que tu pensais voir ? Par exemple, lorsque tu parles de "l'enregistrement 22" est tu bien certain que ce numéro "22", que tu vois dans ton formulaire, est bien le même que le numéro "22" que tu vois dans ta table et signifie la même chose ?

Pour t'aider à répondre à cette dernière question, j'ai un indice à te proposer : tu ne peux y répondre "oui", que si c'est toi-même qui a placé, dans ton formulaire, une zone faisant référence à un champ particulier de ta table ; si tu n'as pas placé un tel champ dans ton formulaire, je ne vois pas comment tu peux établir une relation entre le numéro que tu vois sur le compteur d'enregistrements (le "22" en bas de ton formulaire) et le champ de ta table.

En l'occurrence, tu l'as remarqué sur l'enregistrement ayant la clef primaire 23, mais le décalage est pré-existant ; ainsi, si tu regardes le denier enregistrement présenté par ton formulaire, alors qu'il est présenté comme étant le 22ème, tu t'apercevras que dans ta table, il ne porte pas le numéro 22... Ça, c'est normal, puisque ton formulaire présente le contenu de ta table, non pas en triant sur la clef primaire, mais sur l'ordre alphabétique du champ "Titre" ; par hasard, i:l aurait pu se produire que le dernier tuple de ta table soit également le dernier dans l'ordre alphabétique, mais en dehors de cette hypothèse, il n'y a aucune raison particulière pour que le dernier enregistrement présenté par ton formulaire, soit le dernier tuple de ta table.

Mais alors, te demandes-tu, "pourquoi diable la clef primaire de mon dernier tuple est-elle 23, alors que le dernier enregistrement présenté apparaît comme étant le 22ème ? Il en manque un, où est-il ?" ; en fait tu te trompes, il ne t'en manques pas un, mais deux ! Regardes le premier tuple de ta table, il porte le numéro "0" ; comme le dernier enregistrement porte le numéro "23", cela pourrait vouloir dire que 24 enregistrement existent (celui portant la clef "0" étant le premier, celui portant la clef "1" étant le deuxième,... celui portant la clef "23" étant donc le 24ème).

On en revient, une fois encore, à une discussion ancienne, aux termes de laquelle il a été rappelé qu'il était conseillé de ne pas employer la clef primaire à autre chose qu'à identifier, de manière unique, un tuple (en enregistrement de la table) ; même une clef primaire auto-incrémentée, comme c'est le cas de la tienne, ne peut pas servir de compteur de tuples ; dans ton exemple, tu as oublié que tu avais supprimé 2 enregistrements, ceux portant les clefs primaires 16 et 17 ; si l'on reprend notre énumération du paragraphe précédent, le tuple portant la clef "14" est le 15ème enregistrement, celui portant la clef "15" le 16ème, comme il n'y a plus d'enregistrement portant la clef 16, ni la clef 17, celui portant la clef 18 est donc le 17ème et ainsi de suite pour parvenir au tuple portant la clef primaire "23" qui est donc, bel et bien, le 22ème de ta table.

Tous tes enregistrements sont bien présentés par ton formulaire, et ton interrogation ne provient que d'une vérification conduite sur un raisonnement vicié par un emploi "contre nature" d'une clef primaire auto-incrémentée, associé à un tri des données d'une table dont des tuples ont été supprimés à l'usage.

Espérant avoir aidé.

A+



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Répondre à