2009-12-21 15 views
0

Le titre de la question est le nœud du problème. J'ai un frontal Access 2007 (format 2003) avec un back-end SQL Server 2008 Express. Le formulaire d'entrée a un sous-formulaire lié à une autre table. Lors de l'ajout d'un enregistrement dans le formulaire principal, le champ PK de la table (défini sur l'incrément automatique) ignore environ quatre ID (je dis à propos de parce que parfois il est trois, parfois cinq, parfois 4).Accès frontal, SQL Server back-end ignorant les ID de numérotation automatique

À titre d'illustration, si le dernier ID est 1234, l'ID du nouvel enregistrement pourrait être 1238.

J'ai suivi pas à pas le code, mais ai rien trouvé qui indiquerait plusieurs arrêts ou suppressions. Ce problème se manifeste indépendamment du fait que des enregistrements sont ajoutés au sous-formulaire. Je sais que cela pourrait être n'importe quoi, mais j'espère que quelqu'un pourrait avoir un aperçu ou des suggestions d'avenues à explorer.

Répondre

2

Il se peut que certains INSERT de la table soient en cours d'exécution dans une transaction et que la transaction soit annulée, ce qui nécessiterait des ID, ce qui laisserait des espaces.

+0

Les insertions SQL Server qui échouent pour une raison quelconque laissent souvent l'identité incrémentée plus haut, même si rien n'a jamais été inséré dans la table. – Dave

2

Vérifiez la spécification d'identité sur la base de données pour voir ce qu'est l'incrément d'identité. Il peut être incrémenté à un intervalle supérieur à 1, bien que cela n'explique pas votre numérotation impaire. C'est un bon point de départ. De même, vous pourriez demander à des gens de démarrer un enregistrement, puis de le supprimer des transactions en cours de restauration et de l'augmenter.

2

déclenche sql profiler et observateur le RPC: Completed et SqlStmt: événements terminés pour voir ce qui est exactement exécuté. SQL Server ne se contente pas d'ignorer les nombres sans raison.

il semble que l'insertion de quelque chose et le retour ou l'insertion de lignes échouent.