2012-03-20 4 views
0

J'ai un front-end d'Access 2003 qui permet d'utiliser un accès back-end sans problème. J'ai récemment changé le serveur principal Access pour utiliser à la place SQL Server 2005, mais je n'ai pas encore pu résoudre ce problème - toute aide serait appréciée.-à-plusieurs sur le formulaire parent/enfant est de limiter la saisie des données

J'ai deux tables dans plusieurs-à-plusieurs:

tblMembership <--> tblLinkPersonMembership <--> tblPerson 

champs de clé primaire sont membershipId et personID, et la table de lien contient à la fois et rien d'autre.

L'application d'accès a une forme qui utilise tblMembership comme recordsource. Il a une forme d'enfant dont recordsource est

SELECT * 
FROM tblPerson INNER JOIN tblLinkPersonMembership 
    ON tblPerson.personId=tblLinkPersonMembership.personId; 

Cela a bien fonctionné lors de l'utilisation d'une base de données Access (2003) en tant que back-end. Maintenant que le back-end est SQL Server 2005, je peux entrer dans 2 dossiers de personne sur le sous-formulaire, mais lorsque l'enregistrement à la troisième personne pour une adhésion donnée essaie de sauver, je reçois l'erreur suivante:

The Microsoft Jet database engine cannot find a record in the table 
'tblPerson' with key matching field(s) 'tblLinkPersonMembership.personId'. 

Si je ferme la former, ré-ouvrir et revenir à cette adhésion (qui a maintenant 2 personnes associées), je peux alors entrer 2 personnes de plus (personnes # 3 et # 4), mais si j'essaie d'entrer une 5ème personne, je reçois la même erreur. Je peux fermer le formulaire, rouvrir et ajouter 2 autres, ad nauseum.

Je suis un peu perplexe, et ce que la recherche que je l'ai fait à ce jour n'a rien trouvé. De l'aide?

Répondre

0

Je commencerais par avoir le formulaire Access et SQL ouvert côte à côte. Puisque vous pouvez entrer 2 (?) Enregistrements sans problèmes (?), Je voudrais entrer un enregistrement et regarder la base de données (trois tableaux) pour voir quel genre de données y parvient. Ensuite, pour le deuxième enregistrement. L'accent principal serait PKs/FKs. En outre, je mettrais toutes les colonnes clés sur le formulaire d'accès (PKs, FKs) pour voir comment ils sont remplis.

Puis Parent/Enfant forme une relation. Avec votre "SELECT *", vous obtenez deux colonnes personId. Tant que vous utilisez tableName.personId, vous devriez être bien, mais il est aussi quelque chose vaut la peine de vérifier. Par exemple. en vous assurant que vous ne modifiez pas PK de tblPerson pendant que vous souhaitez mettre à jour FK dans tblLinkPersonMembership.

Questions connexes