Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Utilisation d'une requête Ajout

lmc71

XLDnaute Occasionnel
Bonjour le Forum
J'ai créer un petit fichier explicatif sans fioriture pour vous montrer où est mon soucis qui est le suivant.
J'ai diverses tables notamment DEPENSE - MENSUA_VALEUR et des formulaires s'y rapportant. Je voudrais ajouter une partie des données de la tables Mensua_Valeur qui ne figure pas à la table Dépense.
Je pense avoir respecter les relations entre les tables, mais un message d'erreur s'affiche lorsque j'utilise la requête Ajout.
Si une âme charitable veut bien regarder ce fichier et me dire où j'ai fait l'erreur, je l'en remercie d'avance.
Cordialement
Bonne Année à tout le Forum

voici le lien du fichier
Document Cjoint
 

chris

XLDnaute Barbatruc
Re : Utilisation d'une requête Ajout

Bonjour

La structure de ta table Dépenses n'est pas bonne : tu devrais avoir RefAnnée mais pas Année, RefMois mais pas Mois, REfBank mais pas Bank...etc

La table source des enregistrements à ajouter doit contenir toute ces références sinon la relation avec les tables liées n'est pas respectée d'où l'erreur.
 

lmc71

XLDnaute Occasionnel
Re : Utilisation d'une requête Ajout

Bonjour Chris et bonne Année
Bonjour le Forum
Donc si je saisis bien ton langage dans la table Dépense seul RefBank, Ref.... doit figuré. Mais alors comment savoir que le n° 1 de RefBank correspond à la Banque X et non pas à la banque Y.
Je viens de trouver le code insérant directement le nom dans la table, mais apparemment je ne sais pas m'en servir. Pourtant la clef se rapportant à Ref..... est présente dans les tables autant Dépense que Mensualite_Valeur.
Est-ce trop te demander de me constituer un bout de table représentant l'utilsation d'une banque, d'un prénom, d'un motif, sachant que les noms devant figurer dans ces champs proviennent des tables portant leur nom T_prénom pour Prénom, Etc....
le formulaire comment est-il constitué.
Tu es un Pro, pour ne pas vouloir utiliser un autre terme qui à l'heure actuelle serait mal perçu.
Cordialement

voici la copie du code
Private Sub Motif_NotInList(NewData As String, Response As Integer) ' CHAMP Motif
Dim rst As DAO.Recordset
If MsgBox(" " & NewData & vbLf & " Est un nouveau nom." & vbLf & " Voulez-vous l'ajouter ?", _
vbQuestion + vbYesNo) = vbYes Then
Set rst = CurrentDb.OpenRecordset("T_Motif")
rst.AddNew
rst!Motif = NewData
rst.Update
rst.Close
Set rst = Nothing
End If
' Annuler le message d'erreur d'Access
Response = acDataErrAdded
End Sub
 

chris

XLDnaute Barbatruc
Re : Utilisation d'une requête Ajout

Re
...
Donc si je saisis bien ton langage dans la table Dépense seul RefBank, Ref.... doit figuré. Mais alors comment savoir que le n° 1 de RefBank correspond à la Banque X et non pas à la banque Y.
Justement grâce aux relations : la règle dans une BD c'est la non redondance.

Ta requête ajout qui était l'objet de ta demande, ne contient pas tous les champs qui servent aux relations dans Dépenses : REfAnnée et Refmois manquent.

Je ne sais pas trop quel est le contexte et l'objectif opérationnel de cette requête...

Dans un formulaire on peut faire des listes déroulantes alimentées par la table de référence correspondante : l'utilisateur voit soit code + libellé soit juste libellé (si pas de doublon) mais c'est le code qui sera stocké dans la table. En consultation il verra le libellé.

Souvent on code peu : une base bien construite avec des tables et des relations bien étudiées tourne déjà seule. Le code sert surtout pour le contrôle de saisie notamment les champs interdépendants.

Il faudrait que tu regardes le site > Bienvenue sur SelfAccess ! Access, Word, Java, Applets <.

Le webmaster a écrit des livres très bien faits mais ils datent des anciennes versions. Il y a une zone grenier avec des trucs thématiques.
 

lmc71

XLDnaute Occasionnel
Re : Utilisation d'une requête Ajout

Re
Merci pour toutes tes infos.
J'ai déjà commencé à retravailler les formulaires. Le résultat est très bon.
La valeur de la requête Ajout est la suivante : La mensualité est une défense mensuelle du genre Taxe foncière, Electricité.....etc les charges d'un foyer. Ces charges sont stokées dans la table Mensua_Valeur (qui peuvent être modififié via le formulaire Mensua_Mod) et tous les 1er du mois tu actionnes la réquête Ajout qui prend la dernière mensualité et l'insére dans la table dépense selon le mois en cours. Tout ceci fonctionnait très bien dans BD simple, mais je me suis emmêlé les pinceaux entre les codes et les libellés.
Tu me remets sur les rails et je vais poursuivre dans ce sens.
Je vais regarder avec attention le lien SelfAccess.
J'ai bien acheté un livre traitant access, mais il est basique. Il m'a servi.
Cordialement
Je te tiendrai informé du résultat. Encore merci
 

lmc71

XLDnaute Occasionnel
Re : Utilisation d'une requête Ajout

Bonjour Chris
J'ai suivi tes conseils, tout du moins je le pense, en ce qui concerne la constitution d'une table avec ses relations. J'ai constitué une nouvel BD racourci et je n'arrive toujours pas à utiliser la requête Ajout.
Je suis allé sur le site de ton lien. C'est une vrai forêt vierge. On s'y perd. J'ai ouvert le premier exemple et j'ai pu constaté que la clef n'est pas forcément un NuméroAuto. Je vais déjà essayer de comprendre, avec mes vieilles cellules, la requête Ajout, d'où provient l'erreur.
Je te joins le bout de fichier NOUVEL AJOUT . Il suffit de cliquer sur la requête " Ajout Mensua_Val " pour voir le message d'erreur.
Cordialement
 

Pièces jointes

  • Nouvel Ajout.zip
    43.5 KB · Affichages: 60

chris

XLDnaute Barbatruc
Re : Utilisation d'une requête Ajout

Bonjour

Il manque le prénom : c'est pourquoi celle-ci ne marche pas non plus. Si on ajoute 1 ou 2 pour alimenter le prénom cela fonctionne.

Pour les zones de listes si pas de tri, tu peux remplacer "SELECT T2_Bank.RefBank, T2_Bank.[Bank et n°] FROM T2_Bank;" par T2_Bank

La clé peut être n'importe quoi, même un ensemble de champs. Access est très souple à ce niveau.

Les clés numériques sont plus efficaces s'il y a beaucoup d'enregistrements ou pour optimiser les relations.

Cependant le rôle d'une clé est de garantir l'unicité dans une table, ce que ne fait pas vraiment un numéro auto car rien n'empêche de saisir 3 fois un même prénom dans la table des prénoms.
Là tu auras des valeurs courtes et en petit nombre : tu peux faire une table mono champ, le champ prénom servant de clé.
En revanche pour les comptes bancaires c'est plus limite et à éviter pour les villes si tu en gères beaucoup...
 

lmc71

XLDnaute Occasionnel
Re : Utilisation d'une requête Ajout

Re
J'ai fait la modif est effectivement cela fonctionne donc, si je comprend bien il faut exactement le même nombre de champ dans la requête source qu'il y en a dans la table réceptrice ?

En ce qui concerne la zone liste, merci pour l'info. je m'en servirai, mais pour le cas présent cela me permet de sélection le champ Bank et n°

Je me plongerai plus amplement sur SelfAccess.
Cordialement et encore merci pour ton aide personnellle.
 

chris

XLDnaute Barbatruc
Re : Utilisation d'une requête Ajout

Re
Re
J'ai fait la modif est effectivement cela fonctionne donc, si je comprend bien il faut exactement le même nombre de champ dans la requête source qu'il y en a dans la table réceptrice ?
Non mais si le champ est en relation avec une autre table, il ne peut être omis.
En ce qui concerne la zone liste, merci pour l'info. je m'en servirai, mais pour le cas présent cela me permet de sélection le champ Bank et n°
Cela ne chage rien car la table a aussi 2 colonne donc la table suffit, le requête n'est utile que pour un tri particulier. En choisissant bien sa clé, le tri peut être auto...
 
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…