Requery 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
Un utilisateur d'Access 2000 rencontre un problème de rafraîchissement des données lorsqu’un bouton modifie la requête du sous-formulaire: le sous-formulaire ne se réactualise pas tant que le formulaire n’est pas fermé puis rouvert. Plusieurs réponses évoquent la nécessité de relier correctement les champs père/fils ou d'utiliser une méthode de requery adaptée, notamment en invoquant directement le requery du subform. La solution la plus recommandée consiste à cibler le sous-formulaire avec sa référence explicite, par exemple Forms![TonForm]![TonSubForm].Requery, après modification, plutôt que d’attendre un rafraîchissement global. En cas d’échec, d’autres pistes restent l’ouverture du formulaire et l’exécution d’événements dans l’ordre ou l’utilisation d’un constructeur de requête pour forcer le recalcul.
-
voila mon mail est envoyé
Merci de ton aide -
???????
La je suis à court d'idées....
Envoi moi une adresse e-mail à l'adresse suivante:
PbAccess.1.LeLaid@Spamgourmet.Com (n'essaye pas d'envoyer plus d'un mail, je ne recevrai que le premier).
Je t'enverai une compie d'une appli qui marche (seule différence, Access 97, il faudra donc que tu la convertisses).
A+
Rien n'est plus dangereux qu'une idée quand on a
qu'une idée :-) -
Access m'en veut c'est pas possible
Ca veut pas fonctionner -
Bon,
Je te propose de modifier tes fonctions de la manière suivante:
Dans un module, tu écris (pour Cri_Ha):
Public Cri_Ha As String
Public Function ReturnCri_Ha() As String
ReturnCri_Ha= Cri_Ha
End Function
Dans ta procédure click tu écris:
Private Sub bouton_rech_Click()
Coch_Ha.Value = True Then
Cri_Ha = " LIKE '" & Zt_HA.Value & "' "
Else
Cri_Ha = " LIKE '*' "
End If
Forms![F_rech]![Li_resu].Requery
End Sub
Comme critère dans ta query tu écris pour la colonne Ha: = ReturnCri_Ha()
.... Croisons les doights
Rien n'est plus dangereux qu'une idée quand on a
qu'une idée :-) -
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 -
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 :-) -
En plus lors de l'ouverture de mon Form 1, Il m'execute Cri_unit Avant meme d'executer l'evenement OnFormOpen.
-
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 -
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 :-) -
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 :-) -
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
-
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 :-) -
Ca merche pas :'-(
J'ai l'impression qu'il ne prends pas en compte la valeur des fonctions dans les critères -
ok j'essaye ca
-
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 :-) -
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 :-) -
J'ai essayé ta methode ca marche pas plus
Je comprends pas -
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 :-) -
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 :-) -
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 :-)
- 1
- 2