Access:Formulaire de consultation des données

Résolu
Melycea -  
 Melycea -
Bonjour à toutes et à tous,

Je suis en train de créer une base de données sous Access 97.
Maintenant que j'ai bien organisé toutes mes données je voudrai créer un formulaire pour y avoir accès.
Comme c'est la première fois que j'utilise access, je ne sais pas si c'est la meilleure solution.

En fait, je voudrai que quand l'utilisateur saisi une référence, après il y aurait différents champs qui se remplirait avec des données de plusieurs tables, voire, des données calculées, pour donner une sorte de fiche technique de l'objet correspondant à la référence.

J'ai commencé une ébauche mais je ne sais pas du tout comment faire les liens...
Via un bouton avec macro? procédure vba? ou autre chose?

Merci beaucoup pour toute aide.

5 réponses

Utilisateur anonyme
 
Bonjour,

Suggestion :

Table -> Requete -> Formulaire

Créer une requête qui rassemble vos données

Créer un formulaire qui affiche toutes vos données

Créer une requête spécifique avec une référence donnée.

Au moment de la création de cette requête, passer en mode
SQL, et capturé le chaine SQL.

Dim ChaineSQL As String

ChaineSQL = "SELECT "
ChaineSQL = ChaineSQL & "T1.Champs1, "
ChaineSQL = ChaineSQL & "T2.Champs1 "
ChaineSQL = ChaineSQL & "FROM "
ChaineSQL = ChaineSQL & "Table1 T1, Table2 T2 "
ChaineSQL = ChaineSQL & "WHERE "
ChaineSQL = ChaineSQL & "T1.Champs1 = "
ChaineSQL = ChaineSQL & """"" & lbx_reference.text & """"
ChaineSQL = ChaineSQL & ";"

À partir d'une liste déroulante qui pointe sur les références,
tu pourras au changement de cette liste, modifier par
programmation la requête capturé et réexécuter cette requête
qui afficheras les nouvelles données.

Ça semble complexe, mais c'est relativement simple,
j'ai trouvé cette méthode dans mon bouquin de VBA Access 97.

Je te fournirai dans un message ultérieur le code pour modifier
la requête.

Bien entendu, si cette suggestion t'intéresse ?

Cdt

Lupin
1
Utilisateur anonyme
 
re:

Voici l'exemple :

L'évènement après mise à jour de la liste déroulante

Il est toujours souhaitable, de ne jamais adresser
la table directement, donc un état ou un formulaire
seront toujours accroché à une requête et cette
requête interroge la table. De cette façon le formulaire
souhaité, peux toujours pointé le client (l'affaire, buisness...)

Si ton formulaire pointe directement sur la BD, ce sera
plus difficile de la "dynamiser", le rendre convivial
pour l'utilisateur ...

avec ces 2 petites routines, tu peux ouvrir n'importe quel
Formulaires ou État dans l'état que tu le souhaite :-)


Private Sub Liste_References_AfterUpdate()
    
    Dim Chaine As String
    Dim ChaineSQL As String
    Dim CassetteVideo As String
    
On Error GoTo Liste_Cassette_Err

    ' Charger variables
    CassetteVideo = Forms![Formulaire Édition Liste Vidéo].[Liste Cassette].Value
    ' Créer requête SQL
    Chaine = "SELECT "
    Chaine = Chaine & "T1.Mode, "
    Chaine = Chaine & "T1.Numéro, "
    Chaine = Chaine & "T1.Cassette"
    Chaine = Chaine & "T1.Année "
    Chaine = "FROM [Table Vidéo] T1 WHERE T1.Cassette = "
    ChaineSQL = Chaine & """" & CassetteVideo & """"
    
    ' Appel de fonction avec paramétres ( le nom de la requête, la requête )
    If (ChangeRequeteDef("Requête Liste Spécifique Cassette", ChaineSQL)) Then
        DoCmd.OpenForm "Formulaire Liste Spécifique Édition Cassette", acNormal, "", "[Cassette]", , acNormal
    End If

Liste_Cassette_Exit:
    Exit Sub

Liste_Cassette_Err:
    MsgBox Error$
    Resume Liste_Cassette_Exit

End Sub
'


et la fonction de mise à jour d'une requête par VBA :

Option Compare Database
Option Explicit

Public Function ChangeRequeteDef(NomRequete As String, ChaineSQL As String) As Boolean
    
    Dim Definition As QueryDef
    
    If ((NomRequete = "") Or (ChaineSQL = "")) Then
        ChangeRequeteDef = False
    Else
        Set Definition = CurrentDb.QueryDefs(NomRequete)
        Definition.SQL = ChaineSQL
        Definition.Close
        RefreshDatabaseWindow
        ChangeRequeteDef = True
    End If
    
End Function
'


Cdt

Lupin
0
Melycea
 
Tout d'abord, merci beaucoup pour ta réponse assez rapide!
Je pense que ta solution correspond bien à ce que je voulais pour commencer.

Je commence juste à essayer d'intégrer tout ça dans ma base de données et j'ai un petite question : dans la "requête spécifique" à quoi correspond Ibx_reference.txt ? (est-ce que c'est le champ de la liste déroulante?)
Et je comprend pas trop pourquoi on utilise deux tables dans la requête SQL?
C'est une auto-jointure ou c'est par rapport au fait que j'ai des données provenant de plusieurs tables?

Ensuite, dans les deux routines, c'est juste pour être sûre d'avoir bien compris : la procédure se déclenche après modification dans le formulaire et met à jour les données en modifiant la requête SQL qui les "fournit"... c'est bien ça?!

Puis, juste par curiosité, pourquoi c'est mieux de pointer vers une requête que vers une table?
0
Utilisateur anonyme
 
re:

1.)
en effet lbx_reference correspond à une liste déroulante, dans mon code à moi,
l'instruction suivante capture la valeur de la listebox :

CassetteVideo = Forms![Formulaire Édition Liste Vidéo].[Liste Cassette].Value

2.)
je t'ai fournit un exemple avec 2 tables effectivement car tu as écrit que tu avais
2 tables, et non ce n'est pas une auto-jointure mais plutôt le fait que tu ais 2 tables.

Une jointure serait plutôt du style :
SELECT 
   T1.Champ1,
   T1.Champ2,
   T2.Champ2
FROM
    Table1 T1
    INNER JOIN  Table2 T2 ON T1.Champ1 = T2.Champ1
WHERE
    T1.Champ1 = lbx_Reference.Value


3.)
En effet la procédure se déclenche sur l'évènement AfterUpdate de la
liste déroulante :

Private Sub Liste_References_AfterUpdate()

Dans mon code, le nom de la procédure est :

Private Sub Liste_Cassette_AfterUpdate()
-> la même qu'au point 1 de ce message.

4.)
Justement à cause de ce que tu souhaite réalisé. Si ton formulaire
pointe directement sur un table, tu auras toujours tous les enregistrements
dans ton formulaire, alors que si celui-ci pointent sur une requête
c'est la requête qui défini les enregistrements a afficher.

Dans ma BD de Vidéothèque, j'ai plusieurs liste déroulante qui me
donne la possibilité de choisir les enregistrements par style ( drame, comédie,
etc ...), par catégorie ( policier, science-fiction, fantastique, etc... ), par
acteurs, par série, par titre, par réalisateur, etc ...

Si mon formulaire était accroché sur une table, une fois les champs
a afficher choisi, je ne pourrais plus les modifier, alors qu'avec une requête
je peux les modifier à volonté puisque la requête est modifiable par
programmation.

Je ne pourrais te traduire mot à mot le texte de mon bouquin (VBA Access 97),
mais il est clair que c'est la meilleur façon de faire, depuis plus de 10 ans que je code sous Access, je eu le loisirs de vérifier et de valider cette façon de faire.

Cdt

Lupin
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Melycea
 
J'ai enfin fini mon formulaire grâce à toutes vos réponses.

Merci encore!
0