Concaténation Access
Fermé
PseudoNana
Messages postés
11
Date d'inscription
vendredi 4 avril 2008
Statut
Membre
Dernière intervention
15 janvier 2009
-
4 avril 2008 à 11:32
LatelyGeek Messages postés 1758 Date d'inscription vendredi 4 janvier 2008 Statut Membre Dernière intervention 5 janvier 2023 - 7 avril 2008 à 20:09
LatelyGeek Messages postés 1758 Date d'inscription vendredi 4 janvier 2008 Statut Membre Dernière intervention 5 janvier 2023 - 7 avril 2008 à 20:09
A voir également:
- Concaténation Access
- Access appdata - Guide
- Exemple base de données access à télécharger gratuit ✓ - Forum Logiciels
- You don't have permission to access this resource ✓ - Forum Réseaux sociaux
- Acer quick access ✓ - Forum Windows
- Controller access network - Télécharger - Contrôle parental
8 réponses
LatelyGeek
Messages postés
1758
Date d'inscription
vendredi 4 janvier 2008
Statut
Membre
Dernière intervention
5 janvier 2023
550
4 avril 2008 à 13:32
4 avril 2008 à 13:32
Oui, pour faire le lien il est nettement préférable d'avoir un seul champ. Mais tu en veux trois.
Nous allons donc voir comment avoir le beurre et l'argent du beurre.
Rajoute un champ dans ta table Parcelle, que nous appellerons ici CléId
Pour mettre à jour ce champ pour les parcelles existantes, tu crées une requête MAJ. La mise à jour de CléId se fait avec [N°INSEE]&[N°Section]&[N°Cadastre]
Pour les nouvelles parcelles, dans le formulaire de saisie (Parce que je suppose qui'l y a un formulaire de saisie?) il faudra créer une propriété Après MAJ de ces trois champs (On pourrait se cententer de faire sur le dernier saisi mais sur les trois c'est plus sûr, en cas de modif)
Tu affiches la feuille de propriétés
Dans l'onglet Evenement tu choisis Après MAJ, tu cliques sur le bouton générateur à trois points à droite,
Tu choisis module
Et tu écris entre Sub et End Sub
Me!CléId.Value=Me![N°INSEE].Value&Me![N°Section].Value&Me![N°Cadastre].Value
Et ensuite tu peux mettre la clé de ta table Parcelle sur le champ CléId.
A+
Nous allons donc voir comment avoir le beurre et l'argent du beurre.
Rajoute un champ dans ta table Parcelle, que nous appellerons ici CléId
Pour mettre à jour ce champ pour les parcelles existantes, tu crées une requête MAJ. La mise à jour de CléId se fait avec [N°INSEE]&[N°Section]&[N°Cadastre]
Pour les nouvelles parcelles, dans le formulaire de saisie (Parce que je suppose qui'l y a un formulaire de saisie?) il faudra créer une propriété Après MAJ de ces trois champs (On pourrait se cententer de faire sur le dernier saisi mais sur les trois c'est plus sûr, en cas de modif)
Tu affiches la feuille de propriétés
Dans l'onglet Evenement tu choisis Après MAJ, tu cliques sur le bouton générateur à trois points à droite,
Tu choisis module
Et tu écris entre Sub et End Sub
Me!CléId.Value=Me![N°INSEE].Value&Me![N°Section].Value&Me![N°Cadastre].Value
Et ensuite tu peux mettre la clé de ta table Parcelle sur le champ CléId.
A+
Polux31
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 204
4 avril 2008 à 13:36
4 avril 2008 à 13:36
Bonjour,
J'ai quelques questions. Comment une table peut avoir 3 clés primaires ? et pourquoi vouloir créer un identifiant qui existe déjà ? Si, comme je le suppose, la table Parcelle est une table de relation entre 3 autres tables (Commune, section, cadastre) il faut faire par exemple : "Select * From Releve Where id = (Parcelle.numCommune & Parcelle.numSection & Parcelle.numCadastral)". Il existe la fonction concat en sql mais je ne sais pas si elle fonctionne sur Access.
;o)
polux
J'ai quelques questions. Comment une table peut avoir 3 clés primaires ? et pourquoi vouloir créer un identifiant qui existe déjà ? Si, comme je le suppose, la table Parcelle est une table de relation entre 3 autres tables (Commune, section, cadastre) il faut faire par exemple : "Select * From Releve Where id = (Parcelle.numCommune & Parcelle.numSection & Parcelle.numCadastral)". Il existe la fonction concat en sql mais je ne sais pas si elle fonctionne sur Access.
;o)
polux
LatelyGeek
Messages postés
1758
Date d'inscription
vendredi 4 janvier 2008
Statut
Membre
Dernière intervention
5 janvier 2023
550
4 avril 2008 à 16:31
4 avril 2008 à 16:31
Je suppose que PseudoNana voulait dire "Clé multi-champ".
Ca peut fonctionner mais c'est pas super pratique, par exemple pour créer un nouveau relevé il faut remplir les trois champs au lieu d'en sélectionner un seul.
D'une manière générale, dans une relation, si on veut utiliser Access sans galères inutiles, il faut que la clé de la table du côté "Un" de la relation porte sur UN seul champ. Mais la concaténation fonctionne.
Ca peut fonctionner mais c'est pas super pratique, par exemple pour créer un nouveau relevé il faut remplir les trois champs au lieu d'en sélectionner un seul.
D'une manière générale, dans une relation, si on veut utiliser Access sans galères inutiles, il faut que la clé de la table du côté "Un" de la relation porte sur UN seul champ. Mais la concaténation fonctionne.
PseudoNana
Messages postés
11
Date d'inscription
vendredi 4 avril 2008
Statut
Membre
Dernière intervention
15 janvier 2009
7 avril 2008 à 12:28
7 avril 2008 à 12:28
Merci pour ces infos. Ma requête de mise à jour fonctionne bien. Par contre pour mon formulaire, la procédure évenementielle Après Maj ne marche pas.
Je l'applique bien sur les trois champs. Ca bloque sur le mot clé Me.
J'essaie de mon côté de me documenter, car c'est nouveau pour moi VBA.
Private Sub PAinsee_AfterUpdate()
Me!PAid.Value=Me![PAinsee].Value&Me![PAsection].Value&Me![PAnum].Value
End Sub
Private Sub PAsection_AfterUpdate()
Me!PAid.Value=Me![PAinsee].Value&Me![PAsection].Value&Me![PAnum].Value
End Sub
Private Sub PAnum_AfterUpdate()
Me!PAid.Value=Me![PAinsee].Value&Me![PAsection].Value&Me![PAnum].Value
End Sub
Je l'applique bien sur les trois champs. Ca bloque sur le mot clé Me.
J'essaie de mon côté de me documenter, car c'est nouveau pour moi VBA.
Private Sub PAinsee_AfterUpdate()
Me!PAid.Value=Me![PAinsee].Value&Me![PAsection].Value&Me![PAnum].Value
End Sub
Private Sub PAsection_AfterUpdate()
Me!PAid.Value=Me![PAinsee].Value&Me![PAsection].Value&Me![PAnum].Value
End Sub
Private Sub PAnum_AfterUpdate()
Me!PAid.Value=Me![PAinsee].Value&Me![PAsection].Value&Me![PAnum].Value
End Sub
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Polux31
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 204
7 avril 2008 à 12:33
7 avril 2008 à 12:33
bjr,
Me!PAid.Value=Me![PAinsee].Value&Me![PAsection].Value&Me![PAnum].Value
PAid, PAinsee, PAsection, PAnum sont des TextBoxes de ton formulaire ?
Dans ce cas la syntaxe est :
;o)
polux
Me!PAid.Value=Me![PAinsee].Value&Me![PAsection].Value&Me![PAnum].Value
PAid, PAinsee, PAsection, PAnum sont des TextBoxes de ton formulaire ?
Dans ce cas la syntaxe est :
Me.PAid.Text = Me.PAinsee.Text & Me.PAsection.Text & Me.PAnum.Text
;o)
polux
PseudoNana
Messages postés
11
Date d'inscription
vendredi 4 avril 2008
Statut
Membre
Dernière intervention
15 janvier 2009
7 avril 2008 à 16:57
7 avril 2008 à 16:57
Désolée, mais ça ne fonctionne tjrs pas.
On me marque: Impossible de faire référence à une propriété ou de la définir pour un contrôle si ce dernier n'est pas activé.
J'ai vérifié et l'ensemble de mes zones de texte sont activées.
L'intérêt du code est bien d'obtenir le champ id en saisissant uniquement les trois champs Insse, section, num cadastral dans le formulaire. Ou il faut tout de même passer par la requête de mise à jour?
Pour le moment ça ne me convient pas parce que je ne peux pas attribuer au champ id une clé primaire, car on a une valeur nulle tant que la mise à jour n'est pas faite.
Ne pas hésiter à me poser des questions?
On me marque: Impossible de faire référence à une propriété ou de la définir pour un contrôle si ce dernier n'est pas activé.
J'ai vérifié et l'ensemble de mes zones de texte sont activées.
L'intérêt du code est bien d'obtenir le champ id en saisissant uniquement les trois champs Insse, section, num cadastral dans le formulaire. Ou il faut tout de même passer par la requête de mise à jour?
Pour le moment ça ne me convient pas parce que je ne peux pas attribuer au champ id une clé primaire, car on a une valeur nulle tant que la mise à jour n'est pas faite.
Ne pas hésiter à me poser des questions?
Polux31
Messages postés
6917
Date d'inscription
mardi 25 septembre 2007
Statut
Membre
Dernière intervention
1 novembre 2016
1 204
7 avril 2008 à 18:45
7 avril 2008 à 18:45
Essaie avec ça :
Me.PAid.Value = Me.PAinsee.Value & Me.PAsection.Value & Me.PAnum.Value
a tout hasard !!!
polux
Me.PAid.Value = Me.PAinsee.Value & Me.PAsection.Value & Me.PAnum.Value
a tout hasard !!!
polux
LatelyGeek
Messages postés
1758
Date d'inscription
vendredi 4 janvier 2008
Statut
Membre
Dernière intervention
5 janvier 2023
550
7 avril 2008 à 20:09
7 avril 2008 à 20:09
"...Pour le moment ça ne me convient pas parce que je ne peux pas attribuer au champ id une clé primaire, car on a une valeur nulle tant que la mise à jour n'est pas faite."
C'est exactement pour ça que ça n'est pas pratique d'avoir ta clé sur ces trois champs!!!!!
C'est exactement pour ça que ça n'est pas pratique d'avoir ta clé sur ces trois champs!!!!!