Requery Access 2000

Fermé
julgood - 26 mai 2004 à 14:57
 julgood - 27 mai 2004 à 10:58
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

salut,
ce que je pourrais te conseiller :
- creer une macro qui affiche tous les enregistrements
et faire pour ton bouton:
Docmd.RunMacro "TaMacro"
0
Utilisateur anonyme
26 mai 2004 à 15:23
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
ca change rien du tout
0
Utilisateur anonyme
26 mai 2004 à 15:40
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
Sur le Form
0
julgood > julgood
26 mai 2004 à 15:45
Mon sous form est en mode feuille de données
0
Utilisateur anonyme
26 mai 2004 à 15:46
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
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

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

Posez votre question
Utilisateur anonyme
26 mai 2004 à 15:57
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
J'eesaye et je te dis si ca marche
0
Utilisateur anonyme
26 mai 2004 à 16:05
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
Utilisateur anonyme
26 mai 2004 à 16:16
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
Mon SubForm n'est pas lier par les champs pères et champs fils
c peut etre cela qui manque??
0
J'ai essayé ta methode ca marche pas plus
Je comprends pas
0
Utilisateur anonyme
26 mai 2004 à 16:29
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
Utilisateur anonyme
26 mai 2004 à 16:31
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
ok j'essaye ca
0
Ca merche pas :'-(

J'ai l'impression qu'il ne prends pas en compte la valeur des fonctions dans les critères
0
Utilisateur anonyme
27 mai 2004 à 08:50
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
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
Utilisateur anonyme
27 mai 2004 à 09:11
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
Utilisateur anonyme
27 mai 2004 à 09:13
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
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
En plus lors de l'ouverture de mon Form 1, Il m'execute Cri_unit Avant meme d'executer l'evenement OnFormOpen.
0
Utilisateur anonyme
27 mai 2004 à 09:59
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
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