Requery Access 2000

julgood -  
 julgood -
Bonjour, j'ai une application access 2000.

Sur un formulaire, j'ai un sous formulaire et un bouton. Lorsque j'appuie sur le bouton cela modifie ma requête sur laquelle est basée le sous formulaire (donc en change les données)

Et à la fin du code de mon bouton je fais
Me.SsForm.Form.Requery et ca ne rafraichit pas

Par contre si je ferme le formulaire et que je le réouvre les nouvelles données sont apparues

Si qqun sait pourquoi le Requery ne marche pas, je lui demande son aide

24 réponses

  • 1
  • 2
  1. vanyou
     
    salut,
    ce que je pourrais te conseiller :
    - creer une macro qui affiche tous les enregistrements
    et faire pour ton bouton:
    Docmd.RunMacro "TaMacro"
    0
  2. Utilisateur anonyme
     
    Essaye ceci à la place de ta ligne de code:

    Forms![TonForm]![TonSubForm].Requery

    Voili voilou

    Rien n'est plus dangereux qu'une idée quand on a 
    qu'une idée
      :-)
    0
    1. julgood
       
      ca change rien du tout
      0
  3. Utilisateur anonyme
     
    Ton bouton, il est placé sur le form ou sur le subform?

    Rien n'est plus dangereux qu'une idée quand on a 
    qu'une idée
      :-)
    0
    1. julgood
       
      Sur le Form
      0
      1. julgood > julgood
         
        Mon sous form est en mode feuille de données
        0
  4. Utilisateur anonyme
     
    C'est curieux, ça devrait marcher.
    Comment le bouton modifie-t-il les paramètres de ta query?

    Si le code n'est pas trop long, pourrais-tu l'afficher?

    Rien n'est plus dangereux qu'une idée quand on a 
    qu'une idée
      :-)
    0
    1. julgood
       
      Private Sub bouton_rech_Click()

      Call GEstion_Coch
      Forms![F_rech]![Li_resu].Requery

      End Sub


      If Me.Coch_mag.Value = True Then
      If Me.Coch_site.Value = True Then
      Cri_Unit = " LIKE '*' "
      Else
      Cri_Unit = " LIKE 'MAG' "
      End If
      Else
      If Me.Coch_site.Value = True Then
      Cri_Unit = " NOT LIKE 'MAG' "
      Else
      MsgBox "Veuillez cochez au moins un emplacement avant de lancer la recherche", , "TOTAL France"
      Exit Sub
      End If
      End If

      If Me.Coch_Ha.Value = True Then
      Cri_HA = " LIKE '" & Me.Zt_HA.Value & "' "
      Else
      Cri_HA = " LIKE '*' "
      End If

      If Me.Coch_pp.Value = True Then
      Cri_pp = " LIKE '" & Me.Zt_pp.Value & "' "
      Else
      Cri_pp = " LIKE '*' "
      End If

      If Me.Coch_pui.Value = True Then
      Cri_puiss = " LIKE '" & Me.Zt_puiss.Value & "' "
      Else
      Cri_puiss = " LIKE '*' "
      End If

      If Me.Coch_Forme.Value = True Then
      Cri_Forme = " LIKE '" & Me.Zt_Forme.Value & "' "
      Else
      Cri_Forme = " LIKE '*' "
      End If

      If Me.Coch_Cenelec.Value = True Then
      Cri_Cenelec = " LIKE '" & Me.Zt_Cenelec.Value & "' "
      Else
      Cri_Cenelec = " LIKE '*' "
      End If

      If Me.Coch_tension.Value = True Then
      Cri_Tension = " LIKE '" & Me.Zt_tension.Value & "' "
      Else
      Cri_Tension = " LIKE '*' "
      End If

      StrSQL = "SELECT Matricule, Unité, Repère, ROVB, VISR, Constructeur, Année, Cenelec, Température, Type_Constructeur, Forme, HA, Vitesse, Puissance, Tension, Intensité, n°Série, Nbre_poles, BoutArbre, [Poids moyen] FROM T_moteurs WHERE Unité" & Cri_Unit & "ANd HA" & Cri_HA & "AND Nbre_poles" & Cri_pp & "AND Puissance" & Cri_puiss & "AND Forme" & Cri_Forme & "AND Cenelec" & Cri_Cenelec & "AND Tension" & Cri_Tension & ";"

      CurrentDb.QueryDefs("Req_Rech").SQL = StrSQL
      CurrentDb.QueryDefs.Refresh


      End Sub
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Utilisateur anonyme
     
    OK, j'imagine que ta query prend en critère de sélection des valeurs telles que Cri_Unit.

    J'ai eu le problème une fois et je l'ai contourné de la manière suivant:

    J'ai créé une fonction (dans un module) qui renvoit la valeur de ta variable (cela force access à la mettre à jour au niveau de la query.

    Public Function getVar() As String
    getVar = Nom_de_taVariable
    End Function

    Et dans la query je mets comme critère = getVar()

    J'espère que ça marchera. J'ai sous les yeux un form de ce type qui fonctionne (la seule dif est que le control qui modifie le suform est de type liste déroulante).

    Rien n'est plus dangereux qu'une idée quand on a 
    qu'une idée
      :-)
    0
    1. julgood
       
      J'eesaye et je te dis si ca marche
      0
  7. Utilisateur anonyme
     
    Je viens de voir que tu fais ta sélection via un stingSQL...
    Je te conseils de le faire via une query via le query builder...

    Cre que j'ai écris plus haut ne fonctinnera pas avec une mise à jour de tes querydefs.

    Rien n'est plus dangereux qu'une idée quand on a 
    qu'une idée
      :-)
    0
  8. Utilisateur anonyme
     
    J'ai essayé ton code sur un de mes form:

    Private Sub TBName_AfterUpdate()
    Dim strSQL As String
    gFTable = TBName.Value
    strSQL = "SELECT [Fermat Table_Column].[Table Name], [Fermat Table_Column].[Column Name],[Fermat Table_Column].[Basel II], [Fermat Table_Column].Held, [Fermat Table_Column].[Column ID],[Fermat Table_Column].Question FROM [Fermat Table_Column]WHERE ((([Fermat Table_Column].[Table Name]) ='" & TBName.Value & "')) ORDER BY [Fermat Table_Column].[Column ID];"

    CurrentDb.QueryDefs("Sub Form Fermat Table query").SQL = strSQL
    CurrentDb.QueryDefs.Refresh

    Forms![Fermat Tables]![Fermat Table Sub form].Requery
    End Sub

    Et ça marche!!!!

    La seule dif réside dans le fait que TBName soit un menu déroulant...

    Remarque: Ton subform ne doit pas être lié à ton form via des "Link Child Field" et "Link master Field".

    Rien n'est plus dangereux qu'une idée quand on a 
    qu'une idée
      :-)
    0
    1. julgood
       
      Mon SubForm n'est pas lier par les champs pères et champs fils
      c peut etre cela qui manque??
      0
  9. julgood
     
    J'ai essayé ta methode ca marche pas plus
    Je comprends pas
    0
  10. Utilisateur anonyme
     
    Non... Il ne faut pas de père fille...

    Je retires ce que j'ai dit plus haut (dans le post précédant). Via le code
    CurrentDb.QueryDefs("Sub Form Fermat Table query").SQL = strSQL
    CurrentDb.QueryDefs.Refresh
    ça ne marche pas...

    Essaye en modifiant ta query via le query builder.

    Pour cela il faut que tes variables de critère soit publiques et déclarées dans un module.

    Tu crées ensuite une fonction pour chaque variable dont le seul rôle est de renvoyer la variable. (voir ci dessus post précédent).

    Comme critère de sélection dans ta query tu met "= Nomdetafonction()".

    Chez moi, ça marche.

    Rien n'est plus dangereux qu'une idée quand on a 
    qu'une idée
      :-)
    0
  11. Utilisateur anonyme
     
    Donc, commence par créer ta query "Req_Rech" manuellement via le query builder.

    Rien n'est plus dangereux qu'une idée quand on a 
    qu'une idée
      :-)
    0
  12. julgood
     
    Ca merche pas :'-(

    J'ai l'impression qu'il ne prends pas en compte la valeur des fonctions dans les critères
    0
  13. Utilisateur anonyme
     
    Quand tu fermes le form et que tu le réouvre, les données sont mise à jour?

    Rien n'est plus dangereux qu'une idée quand on a 
    qu'une idée
      :-)
    0
  14. julgood
     
    non pas cette fois la la requête me donna aucun résultat pourtant quand je met des expression espionnes dans le code sur mes fonction ca marche
    0
  15. Utilisateur anonyme
     
    Récapitulons:

    1. Tu as un form (Form1) qui contient un subform (sform).
    Dans ton Form1 il y a un bouton qui provoque la mise à jour de critères pour ta query (via la procédure Gestion_Coch).

    2. Tu as déclaré dans un module les variables Publiques Cri_xxx (attention, elle ne peuvent plus être déclarées en local dans ta procédure).

    3. Pour chaque variable Cri_xxx tu as créé une fonction Pubilique qui renvoit la valeur de Cri_xxx (fRevoiCri_xxx).

    4. Tu as créé un query liée à ton subform (Req_Rech).
    Dans la ligne "Criteria" tu as indiqué = fRavoiCri_xxx.

    5. La procédure "Click" de ton bouton se termine par
    Forms![Form1]![sFrom].Requery

    UNE SUGGESTION:
    Elimine ta routine Gestion_Coch et inclus le code directement dans la fonction "bouton_rech_Click" afin d'éviter le problème de variables locales et globales.

    Rien n'est plus dangereux qu'une idée quand on a 
    qu'une idée
      :-)
    0
  16. Utilisateur anonyme
     
    N'oublie pas de spécifier dans les propriétés de Form1 que Has Module = Yes

    Rien n'est plus dangereux qu'une idée quand on a 
    qu'une idée
      :-)
    0
  17. julgood
     
    J'ai éliminé ma routine Gestion Coch.
    Lors de l'appui sur les bouton, j'appelle les fonction Cri_xxx situées dans le module.
    Ensui te je fais mon Forms![Form1]![sFrom].Requery

    Mes fonctions Cri sont écrites comme ceci:
    Public Function Cri_HA() As String

    If Forms("F_rech").Coch_Ha.Value = True Then
    Cri_HA = " LIKE '" & Forms("F_rech").Zt_HA.Value & "' "
    Else
    Cri_HA = " LIKE '*' "
    End If

    End Function

    Qd je met un espion sur Cri_Ha(), je vois bien la valeur voulue mes
    ma requête ne me donne aucun résultat
    0
  18. julgood
     
    En plus lors de l'ouverture de mon Form 1, Il m'execute Cri_unit Avant meme d'executer l'evenement OnFormOpen.
    0
  19. Utilisateur anonyme
     
    Non, non,...

    Tu ne dois pas appeler la fonction Cri_xxx dans la routine. Elles doivent être utilisées directement dans les critères de ta query (dans le query panel). Quand tu es en mode design sur une query, il te suffit de mettre dans ta ligne de "Criteria" = Cri_xxx().

    La procédure Click ne doit contenir que
    Forms![Form1]![sFrom].Requery
    et rien d'autre (normalement).

    Concernant ta deuxième remarque:
    Il faut faire attention car le Sub form est ouvert AVANT le form.
    Il faut donc définr des valeur par défaut (true ou false) et ne pas laisser la propriété "default value" de tes check box à blanc.

    Rien n'est plus dangereux qu'une idée quand on a 
    qu'une idée
      :-)
    0
  20. julgood
     
    voila c corriG pour la 2eme remarqe
    J'ai enlevé les appels de fonctions
    Mais la requête ne me donne toujours aucun résultat
    0
  • 1
  • 2