IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 44
    Par défaut Comment RELIER un champ de formulaire indépendant à un champ du meme formulaire lié à une table avec rqt SQL ?
    Bonjour à tous,
    Je ne parviens pas à parametrer un champ de formulaire qui se rempli tout seul en interrogeant la base chaque fois que le champ de formulaire d'à coté change de valeur.

    Le champ de formulaire lié à la table impliquée dans la requete SQL du formulaire s'appelle [ID Box]

    Nom : F_emprunteur_box.png
Affichages : 247
Taille : 30,4 Ko

    A chaque changement d'enregistrement de la table T_Box en utilisant le système de navigation du formulaire ce champ change de valeur (évidement)

    Mon champ de formulaire indépendant contient pour source de données une requete sql =
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =(select [T_Box]![Nom] & " | " & [T_Box]![Libelle] as Boite from [T_Box] where [T_Box]![ID Box] =  [Formulaires]![F_Emprunteur]![ID Box])
    Access ne comprends pas :
    résultat #nom?

    J'ai essayé de passer par du code au chargement du formulaire avec un autre exemple,
    cette fois mon champ lié s'appelle HouseholdInvID,
    le nom du champ indépendant que je souhaite mettre en place est QualifOBJ
    et la requête pour alimenter ce champ est :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select [T_MAIN_Inventory]![Manufacturer] & " | " & [T_MAIN_Inventory]![Model] & " | " & [T_MAIN_Inventory]![ModelNumber] & " | " & [T_MAIN_Inventory]![SerialNumber] & " | " & [T_MAIN_Inventory]![NOM] & " | " & [T_MAIN_Inventory]![NMUS] & " | " & [T_MAIN_Inventory]![SURNOM] as QualOBJ  from [T_MAIN_Inventory] where [T_MAIN_Inventory]![HouseholdInvID] =  [Formulaires]![F_Emprunteur]![HouseholdInvID]
    => cela fonctionne pour le premier chargement, via la procédure Form_Load,

    Nom : F_emprunteur_generiq.png
Affichages : 234
Taille : 8,4 Ko

    mais ne se met pas à jour si je change d'enregistrement.
    J'ai essayé de mettre à jours comme pour le chargement du formulaire sur différents évènements,
    d'abord les les évènements liés au champ HouseholdInvID qui lui mémé est lié au résultat de la requete sousjacente du formulaire

    Nom : F_emprunt_Housholdinv.png
Affichages : 238
Taille : 15,8 Ko

    puis avec les évènements liés au formulaires.
    Mais quelque soit l'évènement tenté hormis 'Form_Load', cela ne change rien : ils ne sont pas invoqués.

    sources des évènements essayés sur le champ de formulaire HouseholdInvID lié

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    Private Sub HouseholdInvID_AfterUpdate()
    Dim MDBG As Boolean   ' Statut du mode DEBUG
    MDBG = False          ' initialisation du Mode DEBUG
     
    'lit le parametre de l'application dans la table des parametres (module C_PrmAppli)
    'Passage en mode debug si la valeur retournée convertie en majuscule est égale à VRAI
    If (Not IsNull(TmpVar) And UCase(LitPrm_AMDBG) = "VRAI") Then MDBG = True
     
    ' Trace en cas de debug
    If MDBG Then MsgBox " F_Emprunteur _ Private Sub HouseholdInvID_AfterUpdate..."
     
    'alimentation du champ de formulaire QualifOBJ
    AlimQualObj (MDBG)
    End Sub
     
    Private Sub HouseholdInvID_Change()
    Dim MDBG As Boolean   ' Statut du mode DEBUG
    MDBG = False          ' initialisation du Mode DEBUG
     
    'lit le parametre de l'application dans la table des parametres (module C_PrmAppli)
    'Passage en mode debug si la valeur retournée convertie en majuscule est égale à VRAI
    If (Not IsNull(TmpVar) And UCase(LitPrm_AMDBG) = "VRAI") Then MDBG = True
     
    ' Trace en cas de debug
    If MDBG Then MsgBox " F_Emprunteur _ Private Sub HouseholdInvID_Change..."
     
    'alimentation du champ de formulaire QualifOBJ
    AlimQualObj (MDBG)
    End Sub
     
    Private Sub HouseholdInvID_Dirty(Cancel As Integer)
    Dim MDBG As Boolean   ' Statut du mode DEBUG
    MDBG = False          ' initialisation du Mode DEBUG
     
    'lit le parametre de l'application dans la table des parametres (module C_PrmAppli)
    'Passage en mode debug si la valeur retournée convertie en majuscule est égale à VRAI
    If (Not IsNull(TmpVar) And UCase(LitPrm_AMDBG) = "VRAI") Then MDBG = True
     
    ' Trace en cas de debug
    If MDBG Then MsgBox " F_Emprunteur _ Private Sub HouseholdInv_Dirty..."
     
    'alimentation du champ de formulaire QualifOBJ
    AlimQualObj (MDBG)
    End Sub

    Cidessous, ma fonction execution de la requête dont le résultat doit s'afficher dans le champ indépendant que je cherche à lier au champ visé de mon formulaire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    Private Sub AlimQualObj(trcdbg As Boolean)
    Dim rs As Recordset
    Dim RSQL As String
     
    If trcdbg Then MsgBox " F_Emprunteur _ AlimQualObj..."
     
    RSQL = "SELECT [T_MAIN_Inventory]![Manufacturer] & ' | ' "
    RSQL = RSQL & "& [T_MAIN_Inventory]![Model] & ' | ' & [T_MAIN_Inventory]![ModelNumber]"
    RSQL = RSQL & "& ' | ' & [T_MAIN_Inventory]![SerialNumber] & ' | ' & [T_MAIN_Inventory]![NOM] "
    RSQL = RSQL & "& ' | ' & [T_MAIN_Inventory]![NMUS] & ' | ' & [T_MAIN_Inventory]![SURNOM] "
    RSQL = RSQL & " as QualOBJ  from [T_MAIN_Inventory] "
    RSQL = RSQL & " where [T_MAIN_Inventory]![HouseholdInvID] = " & Me.HouseholdInvID
     
    'This tutorial contains examples of using SQL with VBA Access. As you will see below,
    'to run SQL queries in Access with VBA you can use either the
    'DoCmd.RunSQL or CurrentDb.Execute methods
     
    If trcdbg Then MsgBox RSQL
     
    Set rs = CurrentDb.OpenRecordset(RSQL, dbOpenDynaset)
     
    Do While Not (rs.EOF) 'Begin row processing _ tant que ce n'est pas la fin de fichier
    'If Not rs.BOF And Not rs.EOF Then ' si ce n'est pas un début ni une fin de recordset
    ' rs.BOF provoque une erreur de compilation
     
         'you will only be here if Rows are returned
     
         If ((IsNull(rs)) Or (rs(0) = "") Or (rs(0) = Null) Or (IsNull(rs(0)))) Then
             'Si la requête retourne une valeur nulle, alors message de trace 
             If trcdbg Then MsgBox " retourne une valeur vide ou null ..."
         Else
             'Si la requete retourne une valeur non vide, alors mise à jour du champ de formulaire QualifOBJ  avec cette valeur
             If trcdbg Then MsgBox " retourne une valeur non vide ...CStr(rs(0)) : " & CStr(rs(0)) & " !"
             Me.QualifOBJ = CStr(rs(0))
         End If
         rs.MoveNext 'passe a l'occurence suivante (normalement il n'y en a pas)
    Loop
     
        'Cleanup
        rs.Close
        Set rs = Nothing
     
    End Sub
    Autres sources d'évènements essayés au niveau du formulaire, le seul qui fonctionne est form_load

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Private Sub Form_Load()
    Dim MDBG As Boolean   ' Statut du mode DEBUG
    MDBG = False          ' initialisation du Mode DEBUG
     
    'lit le parametre de l'application dans la table des parametres (module C_PrmAppli)
    'Passage en mode debug si la valeur retournée convertie en majuscule est égale à VRAI
    If (Not IsNull(TmpVar) And UCase(LitPrm_AMDBG) = "VRAI") Then MDBG = True
     
    ' Trace en cas de debug
    If MDBG Then MsgBox " F_Emprunteur _ Private Sub Form_Load..."
     
    'alimentation du champ de formulaire QualifOBJ
    AlimQualObj (MDBG)
     
    End Sub
    résultat en trace

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    ---------------------------
    Microsoft Access
    ---------------------------
     F_Emprunteur _ Private Sub Form_Load...
    ---------------------------
    OK   
    ---------------------------
     
    ---------------------------
    Microsoft Access
    ---------------------------
     F_Emprunteur _ AlimQualObj...
    ---------------------------
    OK   
    ---------------------------
     
    ---------------------------
    Microsoft Access
    ---------------------------
    SELECT [T_MAIN_Inventory]![Manufacturer] & ' | ' & [T_MAIN_Inventory]![Model] & ' | ' & [T_MAIN_Inventory]![ModelNumber]& ' | ' & [T_MAIN_Inventory]![SerialNumber] & ' | ' & [T_MAIN_Inventory]![NOM] & ' | ' & [T_MAIN_Inventory]![NMUS] & ' | ' & [T_MAIN_Inventory]![SURNOM]  as QualOBJ  from [T_MAIN_Inventory]  where [T_MAIN_Inventory]![HouseholdInvID] = 1
    ---------------------------
    OK   
    ---------------------------
     
    ---------------------------
    Microsoft Access
    ---------------------------
     retourne une valeur non vide ...CStr(rs(0)) : Adventure Works | Deluxe | KK200 | 1234ABCDDDD1234 |  |  |  !
    ---------------------------
    OK   
    ---------------------------
    Autres évènements jamas appelés :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    Private Sub Form_AfterRender(ByVal drawObject As Object, ByVal chartObject As Object)
    Dim MDBG As Boolean   ' Statut du mode DEBUG
    MDBG = False          ' initialisation du Mode DEBUG
     
    'lit le parametre de l'application dans la table des parametres (module C_PrmAppli)
    'Passage en mode debug si la valeur retournée convertie en majuscule est égale à VRAI
    If (Not IsNull(TmpVar) And UCase(LitPrm_AMDBG) = "VRAI") Then MDBG = True
     
    ' Trace en cas de debug
    If MDBG Then MsgBox " F_Emprunteur _ Private Sub Form_AfterRender..."
     
    'alimentation du champ de formulaire QualifOBJ
    AlimQualObj (MDBG)
     
    End Sub
     
    Private Sub Form_AfterUpdate()
    Dim MDBG As Boolean   ' Statut du mode DEBUG
    MDBG = False          ' initialisation du Mode DEBUG
     
    'lit le parametre de l'application dans la table des parametres (module C_PrmAppli)
    'Passage en mode debug si la valeur retournée convertie en majuscule est égale à VRAI
    If (Not IsNull(TmpVar) And UCase(LitPrm_AMDBG) = "VRAI") Then MDBG = True
     
    ' Trace en cas de debug
    If MDBG Then MsgBox " F_Emprunteur _ Private Sub Form_AfterUpdate..."
     
    'alimentation du champ de formulaire QualifOBJ
    AlimQualObj (MDBG)
    End Sub
     
    Private Sub Form_DataChange(ByVal Reason As Long)
    Dim MDBG As Boolean   ' Statut du mode DEBUG
    MDBG = False          ' initialisation du Mode DEBUG
     
    'lit le parametre de l'application dans la table des parametres (module C_PrmAppli)
    'Passage en mode debug si la valeur retournée convertie en majuscule est égale à VRAI
    If (Not IsNull(TmpVar) And UCase(LitPrm_AMDBG) = "VRAI") Then MDBG = True
     
    ' Trace en cas de debug
    If MDBG Then MsgBox " F_Emprunteur _ Private Sub Form_DataChange..."
     
    'alimentation du champ de formulaire QualifOBJ
    AlimQualObj (MDBG)
    End Sub
     
    Private Sub Form_Dirty(Cancel As Integer)
    Dim MDBG As Boolean   ' Statut du mode DEBUG
    MDBG = False          ' initialisation du Mode DEBUG
     
    'lit le parametre de l'application dans la table des parametres (module C_PrmAppli)
    'Passage en mode debug si la valeur retournée convertie en majuscule est égale à VRAI
    If (Not IsNull(TmpVar) And UCase(LitPrm_AMDBG) = "VRAI") Then MDBG = True
     
    ' Trace en cas de debug
    If MDBG Then MsgBox " F_Emprunteur _ Private Sub Form_Dirty..."
     
    'alimentation du champ de formulaire QualifOBJ
    AlimQualObj (MDBG)
    End Sub


    Comment puis je faire pour creer mon champ d'affichage dymamique en fonction de l'occurence chargée dans mon formulaire
    (si il y arrive au moment du chargement, il doit bien y avoir une solutio n au moment du changement d'occurence, et donc changement d'affichage ou rafraichissement) ?

    Vos aides sont vraiment bienvenues, car la je bloque depuis pas mal de temps, et je suis vraiment à court d'idées.

    Bien cordialement,

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 44
    Par défaut Réponse: Form_Current()
    Réponse voir le tutoriel :

    https://loufab.developpez.com/tutori...ss/evenements/

    J'ai ajouté cette procédure au source du formulaire et cela est la solution. C'est l'évènement recherché.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
     
     
    Private Sub Form_Current()
    ' PROCEDURE APPELEE RECHARGEMENT DU FORMULAIRE SUITE AU 
    ' PASSAGE A L'ENREGISTREMENT SUIVANT OU PRECEDENT
     
    Dim MDBG As Boolean   ' Statut du mode DEBUG
    MDBG = False          ' initialisation du Mode DEBUG
     
    'lit le parametre de l'application dans la table des parametres (module C_PrmAppli)
    'Passage en mode debug si la valeur retournée convertie en majuscule est égale à VRAI
    If (Not IsNull(TmpVar) And UCase(LitPrm_AMDBG) = "VRAI") Then MDBG = True
     
    ' Trace en cas de debug
    If MDBG Then MsgBox " F_Emprunteur _ Private Sub Form_Current()..."
     
    'alimentation du champ de formulaire QualifOBJ
    AlimQualObj (MDBG)
     
    If MDBG Then
       If Me.HouseholdInvID = 1 Then
          Me.QualifOBJ.BackColor = RGB(255, 255, 0) 'jaune
       Else
          Me.QualifOBJ.BackColor = RGB(255, 255, 255)  'blanc
       End If
    End If
     
    End Sub
    résultat:

    chargement initial du formulaire

    Nom : chargtinitial.PNG
Affichages : 219
Taille : 9,8 Ko

    Passage à l'enregistrement suivant au sein du meme formulaire

    Nom : chrgtchgt.PNG
Affichages : 216
Taille : 9,8 Ko

    la valeur de mon champ QualOBJ calculée s'est bien mise à jours en fonction de la valeur de HouseholdInvID

    Yes !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [1.x] Formulaire d'une table avec 2 clefs primaires
    Par floringg dans le forum Symfony
    Réponses: 2
    Dernier message: 04/07/2012, 16h45
  2. Réponses: 3
    Dernier message: 20/09/2006, 17h07
  3. Réponses: 4
    Dernier message: 14/09/2006, 23h28
  4. Réponses: 1
    Dernier message: 24/08/2006, 22h07
  5. Réponses: 5
    Dernier message: 10/05/2006, 16h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo