OVH Cloud OVH Cloud

récupération de données dans un formulaire

9 réponses
Avatar
jacquizou
Bonjour !
Je me permets de reposer ma question qui peut-=EAtre n'=E9tait pas tr=E8s
claire...

Je dois r=E9cup=E9rer les donn=E9es rentr=E9es par le biais d'un
formulaire dans une table, pour les visualiser dans un autre
formulaire.
J'ai donc une table tbl=E9tudiant (champs : num_=E9tudiant (texte),
nom_=E9tudiant,... commentaire)
Une table tblformateur (champs : num_formateur, nom_formateur) et une
table tblAffectation (champs (num_=E9tudiant(texte), nom_formateur et
annotation).

Le formulaire-annotation qui re=E7oit les donn=E9es contient les champs
=AB num_=E9tudiant =BB, =AB nom_formateur =BB et =AB Annotation =BB + un
bouton de sortie (retour vers le formulaire-=E9tudiant)

Et le formulaire-=E9tudiant pour visualiser les donn=E9es, contient entre
autres, les champs =AB num_=E9tudiant =BB, =AB commentaire =BB + un bouton
Ajouter (ouverture du formulaire-annotation)

Plusieurs formateurs entrent des annotations pour un m=EAme =E9tudiant,
et je dois pouvoir voir la totalit=E9 de ces annotations dans le champ
=AB commentaire =BB de mon formulaire-=E9tudiant.

Sur le bouton =AB Ajouter =BB cr=E9=E9 dans le formulaire-=E9tudiant, j'ai
=E9crit le code suivant :

Private Sub Commande14_Click()
On Error GoTo Err_Commande14_Click

Dim stDocName As String
Dim stLinkCriteria As String
Dim rdsan As New ADODB.Recordset
Dim commentaire As String
Dim annotation As String

stDocName =3D "formulaire-annotation"
DoCmd.OpenForm stDocName, , , stLinkCriteria

rdsan.Open "select* from tblAffectation, where num_=E9tudiant=3D'" &
Me.num_=E9tudiant & "'", , CurrentProject.Connection
rdsan.MoveFirst
Do Until rdsan.EOF
commentaire =3D commentaire & rdsan(2) & vbCrLf
rdsan.MoveNext
Loop
Set rdsan =3D Nothing

Exit_Commande14_Click:
Exit Sub
Err_Commande14_Click:
MsgBox Err.Description
Resume Exit_Commande14_Click
End Sub

J'obtiens maintenant le message suivant : =AB Incompatibilit=E9 de type
=BB
Je ne sais pas si je suis assez claire dans mes explications... mais je
ne comprends pas....
merci d'avance !

9 réponses

Avatar
Raymond [mvp]
Bonjour.

Es-tu sûr que ça se passe ici:
commentaire = commentaire & rdsan(2) & vbCrLf

1ere opération à faire: vérifier que commentaire ne contient pas ou ne
reçoit pas de valeur Null, seuls les variant peuvent recevoir des valeurs
Null
Dim commentaire As String

modifier cette ligne:
commentaire = commentaire & rdsan(2) & vbCrLf
par
commentaire = commentaire & Nz(rdsan(2),"") & vbCrLf

2e op: vérifier que c'est bien le 3e champ qu'il faut prendre (index 2).

voir après pour la suite éventuelle
--
@+
Raymond Access MVP http://OfficeSystem.Access.free.fr/
Pour débuter sur le forum: http://www.mpfa.info/
Nouvelle base Access des communes françaises avec
longitude, latitude et 13183 sites internet officiels
http://ardecheearth.free.fr/basededonnees.htm


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

Bonjour !
Je me permets de reposer ma question qui peut-être n'était pas très
claire...

Je dois récupérer les données rentrées par le biais d'un
formulaire dans une table, pour les visualiser dans un autre
formulaire.
J'ai donc une table tblétudiant (champs : num_étudiant (texte),
nom_étudiant,... commentaire)
Une table tblformateur (champs : num_formateur, nom_formateur) et une
table tblAffectation (champs (num_étudiant(texte), nom_formateur et
annotation).

Le formulaire-annotation qui reçoit les données contient les champs
« num_étudiant », « nom_formateur » et « Annotation » + un
bouton de sortie (retour vers le formulaire-étudiant)

Et le formulaire-étudiant pour visualiser les données, contient entre
autres, les champs « num_étudiant », « commentaire » + un bouton
Ajouter (ouverture du formulaire-annotation)

Plusieurs formateurs entrent des annotations pour un même étudiant,
et je dois pouvoir voir la totalité de ces annotations dans le champ
« commentaire » de mon formulaire-étudiant.

Sur le bouton « Ajouter » créé dans le formulaire-étudiant, j'ai
écrit le code suivant :

Private Sub Commande14_Click()
On Error GoTo Err_Commande14_Click

Dim stDocName As String
Dim stLinkCriteria As String
Dim rdsan As New ADODB.Recordset
Dim commentaire As String
Dim annotation As String

stDocName = "formulaire-annotation"
DoCmd.OpenForm stDocName, , , stLinkCriteria

rdsan.Open "select* from tblAffectation, where num_étudiant='" &
Me.num_étudiant & "'", , CurrentProject.Connection
rdsan.MoveFirst
Do Until rdsan.EOF
commentaire = commentaire & rdsan(2) & vbCrLf
rdsan.MoveNext
Loop
Set rdsan = Nothing

Exit_Commande14_Click:
Exit Sub
Err_Commande14_Click:
MsgBox Err.Description
Resume Exit_Commande14_Click
End Sub

J'obtiens maintenant le message suivant : « Incompatibilité de type
»
Je ne sais pas si je suis assez claire dans mes explications... mais je
ne comprends pas....
merci d'avance !
Avatar
jacquizou
Bonjour
Merci Raymond de ta réponse.
J'avais noté la ligne : commentaire = commentaire & rdsan(2) & vbCrLf
sur les conseils "d'Eric", mais sans vraiment comprendre le "(2)". Si
j'ai bien compris, cela correspond à l'emplacement de mon champ dans
ma table....
Mon champ "commentaire" peut effectivement être vide, tant qu'un
formateur n'a pas entré une première annotation.
Je débute et je "patauge" complètement...
J'ai apporté tes modifications, mais j'ai toujours le même message.
Faut-il vraiment indiquer l'index ?
J'ai ré-écrit d'une autre façon, et cette fois-ci j'obtiens le
message : aucune valeur donnée pour un ou plusieurs des paramètres
requis. Pourtant, j'ai du texte dans ma table Affectation.

Private Sub Commande14_Click()
On Error GoTo Err_Commande14_Click

Dim connex1 As ADODB.Connection
Dim stDocName As String
Dim stLinkCriteria As String
stLinkCriteria = "[num_étudiant]=" & "'" & Me![Num_étudiant] &
"'"
Dim rds As ADODB.Recordset
Dim Commentaire As String
Dim Annotation As string
Dim rdsSQL As String

rdsSQL = "SELECT tblAffectation.Annotation "

Set connex1 = CurrentProject.Connection
Set rds = New ADODB.Recordset
rds.Open rdsSQL, connex1

Do Until rds.EOF
Commentaire = Commentaire + rds.Fields("Annotation") & vbCrLf
rds.MoveNext
Loop
rds.Close
connex1.Close
Set rds = Nothing
Set connex1 = Nothing

stDocName = "formulaire-annotation"
DoCmd.OpenForm stDocName, , , stLinkCriteria

Exit_Commande14_Click:
Exit Sub

Err_Commande14_Click:
MsgBox Err.Description
Resume Exit_Commande14_Click

End Sub

Merci de m'éclairer...
Je ne demande qu'à comprendre....
Avatar
Raymond [mvp]
Bonsoir.

as-tu essayé de dérouler le code ligne à ligne avec F8 et de tester la
valeur des données et des variables ?

--
@+
Raymond Access MVP http://OfficeSystem.Access.free.fr/
Pour débuter sur le forum: http://www.mpfa.info/
Nouvelle base Access des communes françaises avec
longitude, latitude et 13183 sites internet officiels
http://ardecheearth.free.fr/basededonnees.htm


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

Bonjour
Merci Raymond de ta réponse.
J'avais noté la ligne : commentaire = commentaire & rdsan(2) & vbCrLf
sur les conseils "d'Eric", mais sans vraiment comprendre le "(2)". Si
j'ai bien compris, cela correspond à l'emplacement de mon champ dans
ma table....
Mon champ "commentaire" peut effectivement être vide, tant qu'un
formateur n'a pas entré une première annotation.
Je débute et je "patauge" complètement...
J'ai apporté tes modifications, mais j'ai toujours le même message.
Faut-il vraiment indiquer l'index ?
J'ai ré-écrit d'une autre façon, et cette fois-ci j'obtiens le
message : aucune valeur donnée pour un ou plusieurs des paramètres
requis. Pourtant, j'ai du texte dans ma table Affectation.

Private Sub Commande14_Click()
On Error GoTo Err_Commande14_Click

Dim connex1 As ADODB.Connection
Dim stDocName As String
Dim stLinkCriteria As String
stLinkCriteria = "[num_étudiant]=" & "'" & Me![Num_étudiant] &
"'"
Dim rds As ADODB.Recordset
Dim Commentaire As String
Dim Annotation As string
Dim rdsSQL As String

rdsSQL = "SELECT tblAffectation.Annotation "

Set connex1 = CurrentProject.Connection
Set rds = New ADODB.Recordset
rds.Open rdsSQL, connex1

Do Until rds.EOF
Commentaire = Commentaire + rds.Fields("Annotation") & vbCrLf
rds.MoveNext
Loop
rds.Close
connex1.Close
Set rds = Nothing
Set connex1 = Nothing

stDocName = "formulaire-annotation"
DoCmd.OpenForm stDocName, , , stLinkCriteria

Exit_Commande14_Click:
Exit Sub

Err_Commande14_Click:
MsgBox Err.Description
Resume Exit_Commande14_Click

End Sub

Merci de m'éclairer...
Je ne demande qu'à comprendre....
Avatar
jacquizou
Bonjour et merci

je pense en effet que mon problème vient de mes variables.
Je vais revoir mes formulaires, j'ai sans doute fait une erreur dans
les liaisons entre table et formulaire...
Je vais recommencer.
Encore merci.
Avatar
jacquizou
Bonjour,

Malgré mes recherches, je ne comprends toujours pas...
Je résume à nouveau :
J'ai trois tables : Table 1 : promotion ([num_étudiant],
[ztxcommentaire]),
Table 2 : Affectation
([num_étudiant],[nom_formateur],[ztxAnnotation])
(cette table est vide tant qu'un formateur n'a
pas rentré d'annotation)
Table 3 : Formateur ([nom_formateur])
2 formulaires : Formulaire Promotion_for établit d'après la table 1
Formulaire Annotation_for établit d'après la
table 2

Pour que du formulaire Promotion_for j'ouvre le formulaire
Annotation_for sur la fiche du même étudiant, j'ai noté dans le
contrôle num_étudiant : source contrôle : num_étudiant et valeur
par défaut : =formulaires![Promotion_for]![num_étudiant]

du formulaire Promotion_for, j'appelle le formulaire Annotation_ par un
bouton contenant le code :
Private Sub Commande29_Click()
On Error GoTo Err_Commande29_Click

Dim stDocName As String
Dim stLinkCriteria As String
stLinkCriteria = "[num_étudiant]=" & "'" & Me![Num_étudiant] &
"'"
Dim ztxCommentaire As String
Dim rds As New ADODB.Recordset

stDocName = "Annotation_for"
DoCmd.OpenForm stDocName, , , stLinkCriteria

rds.Open "select TblAffectation.ztxAnnotation",
CurrentProject.Connection
rds.MoveFirst
Do Until rds.EOF
ztxCommentaire = ztxCommentaire & rds.Fields("ztxAnnotation") &
vbCrLf
rds.MoveNext
Loop

Set rds = Nothing

Exit_Commande29_Click:
Exit Sub

Err_Commande29_Click:
MsgBox Err.Description
Resume Exit_Commande29_Click

End Sub
____

Tout paraît fonctionner puisque tout s'inscrit dans ma table 2, sauf
que le contrôle Commentaire de mon formulaire Promotion reste vide.

Mon but étant que les formateurs puissent lire tous les commentaires
relatifs à un même étudiant, dans le formulaire Promotion_for, sans
pouvoir modifier le texte, mais que chacun puisse ajouter un
commentaire, tout au long de l'année, par le biais du formulaire
Annotation_for.

Qu'est-ce que je fais mal, où, qu'est-ce que j'oublie ?
Merci de votre aide
Avatar
Raymond [mvp]
Bonjour.

comme je te l'ai indiqué, retrouves-tu les bonnes valeurs dans
rds.Fields("ztxAnnotation") lorsque tu fais
ztxCommentaire = ztxCommentaire & rds.Fields("ztxAnnotation") ?
--
@+
Raymond Access MVP http://OfficeSystem.Access.free.fr/
Pour débuter sur le forum: http://www.mpfa.info/
Nouvelle base Access des communes françaises avec
longitude, latitude et 13246 sites internet officiels
http://ardecheearth.free.fr/basededonnees.htm


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


Bonjour,

Malgré mes recherches, je ne comprends toujours pas...
Je résume à nouveau :
J'ai trois tables : Table 1 : promotion ([num_étudiant],
[ztxcommentaire]),
Table 2 : Affectation
([num_étudiant],[nom_formateur],[ztxAnnotation])
(cette table est vide tant qu'un formateur n'a
pas rentré d'annotation)
Table 3 : Formateur ([nom_formateur])
2 formulaires : Formulaire Promotion_for établit d'après la table 1
Formulaire Annotation_for établit d'après la
table 2

Pour que du formulaire Promotion_for j'ouvre le formulaire
Annotation_for sur la fiche du même étudiant, j'ai noté dans le
contrôle num_étudiant : source contrôle : num_étudiant et valeur
par défaut : =formulaires![Promotion_for]![num_étudiant]

du formulaire Promotion_for, j'appelle le formulaire Annotation_ par un
bouton contenant le code :
Private Sub Commande29_Click()
On Error GoTo Err_Commande29_Click

Dim stDocName As String
Dim stLinkCriteria As String
stLinkCriteria = "[num_étudiant]=" & "'" & Me![Num_étudiant] &
"'"
Dim ztxCommentaire As String
Dim rds As New ADODB.Recordset

stDocName = "Annotation_for"
DoCmd.OpenForm stDocName, , , stLinkCriteria

rds.Open "select TblAffectation.ztxAnnotation",
CurrentProject.Connection
rds.MoveFirst
Do Until rds.EOF
ztxCommentaire = ztxCommentaire & rds.Fields("ztxAnnotation") &
vbCrLf
rds.MoveNext
Loop

Set rds = Nothing

Exit_Commande29_Click:
Exit Sub

Err_Commande29_Click:
MsgBox Err.Description
Resume Exit_Commande29_Click

End Sub
____

Tout paraît fonctionner puisque tout s'inscrit dans ma table 2, sauf
que le contrôle Commentaire de mon formulaire Promotion reste vide.

Mon but étant que les formateurs puissent lire tous les commentaires
relatifs à un même étudiant, dans le formulaire Promotion_for, sans
pouvoir modifier le texte, mais que chacun puisse ajouter un
commentaire, tout au long de l'année, par le biais du formulaire
Annotation_for.

Qu'est-ce que je fais mal, où, qu'est-ce que j'oublie ?
Merci de votre aide
Avatar
jacquizou
Re bonjour

Non, je ne trouve rien dans ztxCommentaire = ztxCommentaire &
rds.Fields("ztxAnnotation")

cela me dit : Impossible de trouver l'objet dans la collection...

Mon recordset est-il mal créé ?
Mais peut-être aussi, aurai-je du écrire ce code sur l'évènement
sur ouverture de mon formulaire promotion_for et non pas sur le bouton
ouvrant le formulaire Annotation_for

j'avoue que je suis un peu perdue...

Merci.
Avatar
Raymond [mvp]
on va tourner en rond pendant des jours.
je ne suis pas là cet après-midi, mais si tu m'envoies ta base par mail , en
enlevant les xyz de mon adresse , je jetterai un oeil demain matin de bonne
heure.
indique moi bien sur le mail ce que tu veux faire exactement avec les noms
exacts.

--
@+
Raymond Access MVP http://OfficeSystem.Access.free.fr/
Pour débuter sur le forum: http://www.mpfa.info/
Nouvelle base Access des communes françaises avec
longitude, latitude et 13246 sites internet officiels
http://ardecheearth.free.fr/basededonnees.htm


"jacquizou" a écrit dans le message de
news:
Re bonjour

Non, je ne trouve rien dans ztxCommentaire = ztxCommentaire &
rds.Fields("ztxAnnotation")

cela me dit : Impossible de trouver l'objet dans la collection...

Mon recordset est-il mal créé ?
Mais peut-être aussi, aurai-je du écrire ce code sur l'évènement
sur ouverture de mon formulaire promotion_for et non pas sur le bouton
ouvrant le formulaire Annotation_for

j'avoue que je suis un peu perdue...

Merci.
Avatar
Raymond [mvp]
message envoyée par mail

Bonjour.

ci-joint ta base en retour avec des modifs de code.
j'espère avoir compris ton souci.
pense bien d'envoyer les base dans un fichier zip sinon il y a des problèmes
pour les lire sous outlook.
--
@+
Raymond Access MVP http://OfficeSystem.Access.free.fr/
Pour débuter sur le forum: http://www.mpfa.info/
Nouvelle base Access des communes françaises avec
longitude, latitude et 13246 sites internet officiels
http://ardecheearth.free.fr/basededonnees.htm