frelon444
Messages postés2Date d'inscriptionsamedi 9 juillet 2005StatutMembreDernière intervention 9 juillet 2005
-
9 juil. 2005 à 16:36
frelon444
Messages postés2Date d'inscriptionsamedi 9 juillet 2005StatutMembreDernière intervention 9 juillet 2005
-
9 juil. 2005 à 18:46
Bonjour,
Je suis en train de réaliser un formulaire en VBA dans Access. J'ai généré ma base de données avec SQL.
Mon problème est le suivant:
je veux afficher dans mon formulaire chaque enregistrement de ma table CLIENTS, les contrôles du formulaires reprenant pour chaque client son nom, prenom,codeclient, etc..., ce qui ne me pose pas de problèmes.
Je veux également récupérer pour chaque client dans une zone de liste "LstAnimaux" (il s'agit d'une base pour une clinique vétérinaire) l'ensemble des animaux qui lui appartiennent (clé primaire de la table client : CodeClient , clé étrangère dans la table animaux : CodeClient).
Ma question est la suivante: comment formuler ma requête sql dans mon code pour n'afficher que les animaux liés au client affiché?
Les éléments du code qui semblent poser un problème ont été soulignés:
(ne pas tenir compte des quotes de commentaires pour le code)
Private Sub Form_Load()
Set RsClients = New ADODB.Recordset
RsClients.ActiveConnection = connexion
RsClients.CursorLocation = adUseClient
RsClients.CursorType = adOpenStatic
RsClients.LockType = adLockOptimistic
On Error GoTo gestion_erreur
RsClients.Open "CLIENTS"
Call liste_animaux
'tester si le recordset contient au moins un enregistrement a afficher
If RsClients.RecordCount > 0 Then
'dans ce cas, l'afficher et activer tous les boutons
affichage
Boutons_tous
Else
'sinon, passer en mode ajout
Boutons_ajouter
End If
Champs_invalides
Exit Sub
gestion_erreur:
MsgBox "problème lors de l'ouverture de la table client"
End Sub
Private Sub liste_animaux()
' 'activer le recordset
' Set RsAnimaux = New ADODB.Recordset
' 'définir ses caractéristiques
' RsAnimaux.ActiveConnection = connexion
' RsAnimaux.CursorLocation = adUseClient
' RsAnimaux.CursorType = adOpenStatic
' RsAnimaux.LockType = adLockReadOnly
' 'ouvrir le recordset
RsAnimaux.Open "select CodeAnimal,NomAnimal,Sexe,Couleur,Race,ANIMAUX.CodeClient from ANIMAUX,CLIENT? where ?????"
' 'si le recordset n'est pas vide, on alimente la combox
' If RsAnimaux.RecordCount > 0 Then
' 'trier le recordset sur le nom du representant
' RsAnimaux.Sort = "NomAnimal ASC"
' RsAnimaux.MoveFirst
' LstAnimaux.RowSourceType = "Liste valeurs"
' LstAnimaux.RowSource = RsAnimaux![NomAnimal] & ";" & RsAnimaux![CodeAnimal] & ";" & RsAnimaux![Sexe] & _
' ";" & RsAnimaux![Couleur] & ";" & RsAnimaux![Race]
' Do
' RsAnimaux.MoveNext
' If Not RsAnimaux.EOF Then
' LstAnimaux.RowSource = LstAnimaux.RowSource & ";" & RsAnimaux![NomAnimal] & ";" & RsAnimaux![CodeAnimal] & ";" & RsAnimaux![Sexe] & _
";" & RsAnimaux![Couleur] & ";" & RsAnimaux![Race]
End If
Loop While Not RsAnimaux.EOF
End If
'les données sont transférées dans la zone de liste,
'on a donc plus besoin du recordset
'destruction du recordset
If RsAnimaux.State = adStateOpen Then
RsAnimaux.Close
End If
'Désactiver (liberer) l'objet Recordset
Set RsAnimaux = Nothing
End Sub
Private Sub affichage()
If Not IsNull(RsClients.Fields!CodeClient) Then
TxtCodeClient.Value = RsClients.Fields!CodeClient
Else
TxtCodeClient.Value = ""
End If
If Not IsNull(RsClients.Fields!nom) Then
TxtNomClient.Value = RsClients.Fields!nom
Else
TxtNomClient.Value = ""
End If
If Not IsNull(RsClients.Fields!Prenom) Then
TxtPrenomClient.Value = RsClients.Fields!Prenom
Else
TxtPrenomClient.Value = ""
End If
If Not IsNull(RsClients.Fields!CodePostal) Then
TxtCodePostal.Value = RsClients.Fields!CodePostal
Else
TxtCodePostal.Value = ""
End If
If Not IsNull(RsClients.Fields!Adresse1) Then
TxtAdresse1.Value = RsClients.Fields!Adresse1
Else
TxtAdresse1.Value = ""
End If
If Not IsNull(RsClients.Fields!Adresse2) Then
TxtAdresse2.Value = RsClients.Fields!Adresse2
Else
TxtAdresse2.Value = ""
End If
If Not IsNull(RsClients.Fields!Ville) Then
TxtVille.Value = RsClients.Fields!Ville
Else
TxtVille.Value = ""
End If
If Not IsNull(RsClients.Fields!NumTel) Then
TxtNumTel.Value = RsClients.Fields!NumTel
Else
TxtNumTel.Value = ""
End If
If Not IsNull(RsClients.Fields!Assurance) Then
TxtAssurance.Value = RsClients.Fields!Assurance
Else
TxtAssurance.Value = ""
End If
' LstAnimaux.Value = RsClients.Fields!CodeClient
End Sub
frelon444
Messages postés2Date d'inscriptionsamedi 9 juillet 2005StatutMembreDernière intervention 9 juillet 2005 9 juil. 2005 à 18:46
Le problème avec Where ANIMAUX.CodeClient = CLIENT.CodeClient, c'est qu'il m'affiche tous les animaux de tous les clients. Il me semble qu'il doit y avoir un moyen de récupérer la valeur du contrôle qui contient le CodeClient du client en cours (TxtCodeClient) mais je ne parviens pas à l'associer au codeclient de la requête (ANIMAUX.CodeClient). ?