Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Concaténer : expression des critères ?

4 réponses
Avatar
gauso
Bonjour,
Je ne sais si le titre du message est tr=E8s parlant, mais voil=E0 mon
probl=E8me : soit trois tables
Table1 relation 1-n avec Table2 (champ lien : RefInstit),
Table2 relation 1-n : Table3
Je voudrais r=E9cup=E9rer dans un champ (IndexCateg) de ma Table1, les
valeurs des enregistrements associ=E9s d'un champ (Categorie) de ma
Table3

Enregistrement par enregistrement je sais faire : j'ai mis =E7a sur un
bouton dans un formulaire bas=E9 sur ma Table1 :
(MaRequete contenant les trois tables)

Dim rst As Recordset
Dim strSQL As String
Dim Categ As String
Categ =3D "-"
strSQL =3D "SELECT MaRequete .* FROM MaRequete WHERE
MaRequete.RefInstit =3D " & Me![RefInstit]

Set rst =3D CurrentDb.OpenRecordset(strSQL)
If rst.RecordCount <> 0 Then
rst.MoveFirst
While Not rst.EOF
rst.Edit
Categ =3D Categ & rst!Categorie & " ; "
rst!IndexCateg =3D Categ
rst.Update
rst.MoveNext
Wend
rst.Close
Set rst =3D Nothing
End If

Mais comment faire pour que la mise =E0 jour de mon champ1 (IndexCateg)
se fasse d'un seul coup sur l'ensemble de ma Table1 : comment indiquer
donc au syst=E8me qu'il doit comparer les valeurs respectives de
RefInstit (Table1) et RefInstit2 (Table2) ???
Merci de votre aide : j'ai la t=EAte qui fume ;o)
Sonia.

4 réponses

Avatar
Raymond [mvp]
Bonjour.

je ne sais pas si j'ai bien tout compris mais je vais simplifier avec des
noms simples.
table1 en relation avec table2 , table1.cle_ext_1 vers table2.cle_primaire
table2 en relation avec table3, table2.cle_ext_2 vers table3.cle_primaire
Concaténer table1.champ1 avec table3.champ3, le resultat dans table1.champ1
en rajoutant un ;

Solution:
Lancer une requête mise à jour de ce type:

UPDATE (table1 INNER JOIN table2 ON table1.cle_ext_1 = table2.cle_primaire)
INNER JOIN Table3 ON table2.cle_ext_2 = Table3.cle_primaire SET
table1.champ1= [table1]![champ1] & [Table3]![champ3] & " ; ";

Si une des remarques ne correspond pas à ton problème tu ne fais rien.

fais une copie de ta base et travaille uniquement sur cette copie pour ne
pas endommager ton original en cas d'erreur.

A suivre .....
--
@+
Raymond Access MVP http://OfficeSystem.Access.free.fr/
Pour débuter sur le forum: http://www.mpfa.info/
PowerShell, une nouvelle approche de l'administration de l'environnement
Windows
http://www.comscamp.com/Tracker/Redirect.ashx?linkid_73b247-3260-4fed-861f-bb587f7ef413


"gauso" a écrit dans le message de news:

Bonjour,
Je ne sais si le titre du message est très parlant, mais voilà mon
problème : soit trois tables
Table1 relation 1-n avec Table2 (champ lien : RefInstit),
Table2 relation 1-n : Table3
Je voudrais récupérer dans un champ (IndexCateg) de ma Table1, les
valeurs des enregistrements associés d'un champ (Categorie) de ma
Table3

Enregistrement par enregistrement je sais faire : j'ai mis ça sur un
bouton dans un formulaire basé sur ma Table1 :
(MaRequete contenant les trois tables)

Dim rst As Recordset
Dim strSQL As String
Dim Categ As String
Categ = "-"
strSQL = "SELECT MaRequete .* FROM MaRequete WHERE
MaRequete.RefInstit = " & Me![RefInstit]

Set rst = CurrentDb.OpenRecordset(strSQL)
If rst.RecordCount <> 0 Then
rst.MoveFirst
While Not rst.EOF
rst.Edit
Categ = Categ & rst!Categorie & " ; "
rst!IndexCateg = Categ
rst.Update
rst.MoveNext
Wend
rst.Close
Set rst = Nothing
End If

Mais comment faire pour que la mise à jour de mon champ1 (IndexCateg)
se fasse d'un seul coup sur l'ensemble de ma Table1 : comment indiquer
donc au système qu'il doit comparer les valeurs respectives de
RefInstit (Table1) et RefInstit2 (Table2) ???
Merci de votre aide : j'ai la tête qui fume ;o)
Sonia.
Avatar
gauso
[Oups : je me suis trompée : t'ai envoyé le message directement alors
que voulait continuer le fil... longtemps que pas pratiqué ce
forum...]
Bonjour et merci Raymond :o)
On dirait que tu as tout bien compris... mais tu sais faut tout me
dire à moi ;o)
Tu mettrais cela où ? une requête SQL (pas l'impression que cela
puisse fonctionner?) et si en VB c'est quoi la commande
CurrentDb.Execute ?
Par ailleurs la syntaxe semble poser problème... j'ai écris :
UPDATE (AdressInstitutions INNER JOIN AdresInstitCateg ON
AdressInstitutions.RefInstit = AdresInstitCateg.RefInstit) INNER JOIN
AdresCategories ON AdresInstitCateg. RefCategorie =
AdresCategories.RefCatecorie AdressInstitutions.IndexCateg =
[AdressInstitutions]![ IndexCateg] & [AdresCategories]![categorie] & "
... plante sur le premier INNER : "attendu séparateur de liste ou )"
Une idée ?
Encore merci,
Sonia.


On 1 mai, 14:34, "Raymond [mvp]"
wrote:
Bonjour.

je ne sais pas si j'ai bien tout compris mais je vais simplifier avec des
noms simples.
table1 en relation avec table2 , table1.cle_ext_1 vers table2.cle_primaire
table2 en relation avec table3, table2.cle_ext_2 vers table3.cle_primaire
Concaténer table1.champ1 avec table3.champ3, le resultat dans table1.ch amp1
en rajoutant un ;

Solution:
Lancer une requête mise à jour de ce type:

UPDATE (table1 INNER JOIN table2 ON table1.cle_ext_1 = table2.cle_prima ire)
INNER JOIN Table3 ON table2.cle_ext_2 = Table3.cle_primaire SET
table1.champ1= [table1]![champ1] & [Table3]![champ3] & " ; ";

Si une des remarques ne correspond pas à ton problème tu ne fais rien.

fais une copie de ta base et travaille uniquement sur cette copie pour ne
pas endommager ton original en cas d'erreur.

A suivre .....
--
@+
Raymond Access MVP http://OfficeSystem.Access.free.fr/
Pour débuter sur le forum:http://www.mpfa.info/
PowerShell, une nouvelle approche de l'administration de l'environnement
Windowshttp://www.comscamp.com/Tracker/Redirect.ashx?linkid_73b247-32 60-4f...

"gauso" a écrit dans le message de new s:

Bonjour,
Je ne sais si le titre du message est très parlant, mais voilà mon
problème : soit trois tables
Table1 relation 1-n avec Table2 (champ lien : RefInstit),
Table2 relation 1-n : Table3
Je voudrais récupérer dans un champ (IndexCateg) de ma Table1, les
valeurs des enregistrements associés d'un champ (Categorie) de ma
Table3

Enregistrement par enregistrement je sais faire : j'ai mis ça sur un
bouton dans un formulaire basé sur ma Table1 :
(MaRequete contenant les trois tables)

Dim rst As Recordset
Dim strSQL As String
Dim Categ As String
Categ = "-"
strSQL = "SELECT MaRequete .* FROM MaRequete WHERE
MaRequete.RefInstit = " & Me![RefInstit]

Set rst = CurrentDb.OpenRecordset(strSQL)
If rst.RecordCount <> 0 Then
rst.MoveFirst
While Not rst.EOF
rst.Edit
Categ = Categ & rst!Categorie & " ; "
rst!IndexCateg = Categ
rst.Update
rst.MoveNext
Wend
rst.Close
Set rst = Nothing
End If

Mais comment faire pour que la mise à jour de mon champ1 (IndexCateg)
se fasse d'un seul coup sur l'ensemble de ma Table1 : comment indiquer
donc au système qu'il doit comparer les valeurs respectives de
RefInstit (Table1) et RefInstit2 (Table2) ???
Merci de votre aide : j'ai la tête qui fume ;o)
Sonia.


Avatar
Raymond [mvp]
Il te manque le SET
tu peux le faire en mode création access , c'est surement plus facile pour
les 3 tables.

tu peux lancer la requête par DoCmd.RunSQL , car c'est une requête action .

--
@+
Raymond Access MVP http://OfficeSystem.Access.free.fr/
Pour débuter sur le forum: http://www.mpfa.info/
PowerShell, une nouvelle approche de l'administration de l'environnement
Windows
http://www.comscamp.com/Tracker/Redirect.ashx?linkid_73b247-3260-4fed-861f-bb587f7ef413


"gauso" a écrit dans le message de news:

[Oups : je me suis trompée : t'ai envoyé le message directement alors
que voulait continuer le fil... longtemps que pas pratiqué ce
forum...]
Bonjour et merci Raymond :o)
On dirait que tu as tout bien compris... mais tu sais faut tout me
dire à moi ;o)
Tu mettrais cela où ? une requête SQL (pas l'impression que cela
puisse fonctionner?) et si en VB c'est quoi la commande
CurrentDb.Execute ?
Par ailleurs la syntaxe semble poser problème... j'ai écris :
UPDATE (AdressInstitutions INNER JOIN AdresInstitCateg ON
AdressInstitutions.RefInstit = AdresInstitCateg.RefInstit) INNER JOIN
AdresCategories ON AdresInstitCateg. RefCategorie AdresCategories.RefCatecorie AdressInstitutions.IndexCateg [AdressInstitutions]![ IndexCateg] & [AdresCategories]![categorie] & "
... plante sur le premier INNER : "attendu séparateur de liste ou )"
Une idée ?
Encore merci,
Sonia.
Avatar
gauso
Merci infiniment Raymond : ça marche au poil :o)))
Bonne fête du travail... ( tu sais là où qu'on est censé se
reposer ;o)
Sonia.

On 1 mai, 15:54, "Raymond [mvp]"
wrote:
Il te manque le SET
tu peux le faire en mode création access , c'est surement plus facile p our
les 3 tables.

tu peux lancer la requête par DoCmd.RunSQL , car c'est une requête ac tion .


Sonia.