1

J'ai une base de données dans l'accès accdb accès 2007, il y a plus ou moins 30-40 tables avec la clé primaire associée "numéro_local". c'est une clé primaire de texte avec 10 longueur.Modifier un accès Clé primaire avec des relations

Comment puis-je modifier la longueur de cette clé primaire à 30 SANS supprimer préalablement toutes les 30 relation.

  1. Une question similaire. J'ai besoin d'ajouter une clé primaire de composition à mon PK "local_number". J'ai besoin d'ajouter une "Date" comme PK composé. Ensuite, l'accès permet juste cela si je supprime d'abord toutes les relations.

Comment pouvez-vous Éviter cet avertissement et changer mon PK en ignorant ce message.

Raison de composer PK dans chaque tableau est l'exigence d'un changement de données historiques dans les enregistrements.

mise à jour, Quelqu'un sait si c'est possible ou ai-je la possibilité de supprimer toutes les relations?

Répondre

1
  1. Faire une copie de la base de données avec les relations existantes.

  2. Supprimez toutes les relations dans la copie d'origine.

  3. Ensuite, utilisez code to copy the relationships de la sauvegarde à la copie d'origine.

Je suppose que vous conserviez le même nom pour le champ PK qui est en cours d'édition, mais tout de même, vous pouvez modifier le code de la Base de connaissances Microsoft à l'adresse citée pour expliquer cela.

+0

Merci pour la solution, aide vraiment vraiment et gagnez du temps. – MaK

+0

Salut David, je conserve le même nom pour PK, mais l'indice PK souffre de changements. Maintenant, je n'ai pas besoin de ce champ avec index. mais après avoir modifié cette option sur Aucun index ou sur La propriété indexée d'un champ a été remplacée par Oui (Duplicates OK), les relations n'ont pas été copiées à partir du fichier d'origine. Mais je ne sais pas comment modifier ce code. l'erreur semble être dans cette ligne "ThisDb.Relations.Append ThisRel" Pouvez-vous m'aider à modifier le code pour permettre des relations de copie après le changement d'index. – MaK

+0

Quelle est l'erreur qui se produit sur cette ligne? Vous avez probablement des enregistrements en double dans l'un des champs PK, vous ne pourrez donc pas recréer la relation. –

1

vous pouvez utiliser le modèle d'objet de base de données d'accès et le code VBA qui sera automatiquement

  1. ajouter de nouveaux champs dans les tableaux correspondants (PKs et FKs)
  2. sur la base des relations déjà existantes, mettre à jour toutes les valeurs FK avec des valeurs de PK correspondant,
  3. Briser les relations existantes
  4. Créer les nouvelles relations

Pour savoir quelles relations doivent être remplacées, vous pouvez parcourir les objets de votre base de données.

Ce code pourrait vous inspirer (écrit à la volée/peut être voiturette/chèque aide correspondante):

for i = 0 to mydatabase.Relations.count - 1 
    Debug.Print mydatabase.relations(i).name 
    for j = 0 to myDatabase.relations(i).fields.count -1 
     debug.print myDatabase.relations(i).fields(j).name 
    next j 
next i 
+0

merci, pourriez-vous expliquer plus la 2 étape. Et à l'étape 3 et 4, cela signifie que chaque modification que j'ai besoin de modifier, je dois supprimer et recréer cela? – MaK

+0

étape 2: supposons que vous ayez Tbl_Main, où PK est id_Main, et Tbl_Child, où PK est id_Child et où id_Main est une clé étrangère. Vous allez ensuite créer un champ id_MainNew à la fois dans Tbl_Main et Tbl_Child. En utilisant la relation existante, vous allez mettre à jour Tbl_Child.id_MainNew avec la valeur Tbl_main.id_MainNew. À l'étape 3, la relation existant entre Tbl_Main et Tbl_Child et basée sur id_Main est supprimée. À l'étape 4, une nouvelle relation est créée entre Tbl_Main.id_MainNew et Tbl_Child.id_MainNew –

+0

ok c'est clair.merci – MaK