[VBAccess] Modifier une requete ?

Résolu
Lazarey Messages postés 3255 Date d'inscription   Statut Membre Dernière intervention   -  
Lazarey Messages postés 3255 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour à tous,

Je vous explique rapidement mon problème : Je cherche à accéder au contenu d'une requete enregistrée dans access. Pour cela, j'aimerais utiliser VBA. Existe t-il un moyen de faire ceci ?
Par exemple, si ma requete dans access s'appelle 'Requete1', puis-je en récupérer le contenu de cette manière :

Connection à  la base.....


debug.print quelquechose.requete1.quelquechose


et ensuite modifier le contenu de cette manière :
dim req as string
req = quelquechose.requete1.quelquechose
(je modifie ici req)
et faire ensuite
quelquechose.requete1.quelquechose=req

sachant que cette requete sera utilisée ensuite dans un sous-formulaire.

Je ne sais pas si j'ai été assez clair, mais en tout cas, merci si vous êtes arrivé jusqu'ici...
Configuration: Windows 2000
Firefox 2.0.0.3

10 réponses

  1. blux Messages postés 5033 Date d'inscription   Statut Modérateur Dernière intervention   3 455
     
    C'est assez simple :

    ta requête sera à lancer lors d'un certain évènement (puisque tu voulais en modifier une existante, je suppose donc que tu voulais le faire à un moment précis).

    Il faut donc créer un peu de VBA dans un évènement pour modifier la source d'un formulaire.

    Supposons que c'est fait en appuyant sur un bouton :

    - tu as un formulaire nommé "F_Client" basé sur une requête SELECT NOM, PRENOM FROM Tab_Client WHERE VILLE = 'PARIS'
    - tu souhaites modifier le formulaire pour afficher les NOM, PRENOM rattachés à 'LYON'
    - dans ton bouton, sur l'évènement 'sur clic' tu rajoutes ce code là :
    Dim StrSql As String
    StrSql = "SELECT * FROM Tab_Client WHERE VILLE = 'LYON';"
    Forms.F_Client.RecordSource = StrSql
    Dorénavant, lorsque tu appuieras sur le bouton, le formulaire n'affichera plus que les NOM, PRENOM rattachés à LYON...

    A toi de voir pour la suite : paramétrage de cette requête, récupération de valeurs via boites de dialogue ou de zones du formulaire... La liste n'est pas exhaustive...
    1
  2. blux Messages postés 5033 Date d'inscription   Statut Modérateur Dernière intervention   3 455
     
    Salut,

    c'est effectivement possible, mais le plus simple ne serait-il pas de paramétrer une requête temporaire pour la mettre en source d'un formulaire ?
    0
  3. Lazarey Messages postés 3255 Date d'inscription   Statut Membre Dernière intervention   745
     
    Salut,

    Je suis entièrement d'accord, mais comment faire ?? :-)
    -1
  4. Utilisateur anonyme
     
    Bonjour,

    C'est aussi possible de modifier la requête par programmation :

    exemple :

    Private Sub lbxAcronyme_AfterUpdate()
        
        Dim Chaine As String
        Dim Critere As String
        Dim varAcronyme As String
        
    On Error GoTo Err_lbxAcronyme_AfterUpdate
            
        If (Forms![formclients].[lbxAcronyme] <> "") Then
            varAcronyme = Forms![formclients].[lbxAcronyme]
            Chaine = "Select * from [tabClients] where [Acronyme] Like "
            Critere = Chaine & """" & varAcronyme & "*" & """"
        
            If (ChangeRequeteDef("reqAcronymeSpecifique", Critere)) Then
                DoCmd.OpenForm "formAcronymeSpecifique", acNormal, "", "[Acronyme]", , acNormal
            End If
            InitZoneRecherche
        End If
    
    Exit_lbxAcronyme_AfterUpdate:
        Exit Sub
    
    Err_lbxAcronyme_AfterUpdate:
        MsgBox Error$
        Resume Exit_lbxAcronyme_AfterUpdate
    
    End Sub
    '
    


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

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

    Posez votre question
  6. Lazarey Messages postés 3255 Date d'inscription   Statut Membre Dernière intervention   745
     
    Merci,

    En fait c'es bien ça que je veux faire : je veux changer la source du sous formulaire en fonction de l'endroit où appuie l'utilisateur : 2 boutons à bascule.
    J'ai assayé ce que tu m'a donné, mais cela ne fonctionne pas. Dans ma proc
    Private Sub Bascule20_Click()
    je n'arrive pas à modifier la source du sous formulaire. Voici ce que j'ai assayé :

    Forms![Ajout voies]![SF Liste voies par quartier].RecordSource = req
    

    mais cela ne marche pas.
    Forms.SF_Liste_voies_par_quartier.RecordSource = req
    

    ne marche pas non plus.
    Access me dit : Propriété ou méthode non gérée par cet objet.

    Voici mon code :
    Private Sub Bascule20_Click()
    
    Dim req As String
    
    req = "SELECT Voies.num_voie, Types_voies.nom_type_voie, Voies.nom_voie, Voies.valide, Voies.num_quartier, Voies.num_type_voie FROM (Voies INNER JOIN Types_voies ON Voies.num_type_voie = Types_voies.num_type_voie) INNER JOIN Quartiers ON Voies.num_quartier = Quartiers.num_quartier WHERE(((Voies.valide) = True) And ((Voies.num_quartier) = " & Modifiable7 & ")) ORDER BY Voies.nom_voie;"
    
    Forms![Ajout voies]![SF Liste voies par quartier].RecordSource = req
    [Forms]![Ajout voies]![SF Liste voies par quartier].Requery
    
    End Sub
    


    Mon formulaire s'appelle 'Ajout voies' et mon sous formulaire s'appelle 'SF Liste voies par quartier'.

    Ma requete fonctionne, j'ai pu voir tout ce qu'elle affiche avec une boucle et un débug.print.

    Merci...
    0
    1. blux Messages postés 5033 Date d'inscription   Statut Modérateur Dernière intervention   3 455
       
      Ton sous-formulaire ne serait pas déjà lié au formulaire le contenant en relation père-fils ? (si tu l'as créé en glisser-déposer)
      0
  7. Lazarey Messages postés 3255 Date d'inscription   Statut Membre Dernière intervention   745
     
    Quand je passe en mode création, je sélectionne le sous formulaire, champ père est vide, champ fils aussi. Faut'il modifier ça ?
    0
    1. blux Messages postés 5033 Date d'inscription   Statut Modérateur Dernière intervention   3 455
       
      Non, ça veut dire que ton sous-form n'est pas lié au form (à moins que tu ne l'aies fait en VBA :-))

      Là, typiquement, c'est le sous-formulaire qui n'accepte pas d'être changé, je ne vois pas pourquoi...
      0
    2. blux Messages postés 5033 Date d'inscription   Statut Modérateur Dernière intervention   3 455
       
      Je viens de tester, ça ne marche pas, je cherche pourquoi c'est bon en form mais pas en s/form...
      0
  8. Lazarey Messages postés 3255 Date d'inscription   Statut Membre Dernière intervention   745
     
    Enfin, si en quelque sorte il est lié. Lorsque je choisi un élément d'une liste modifiable du sous formulaire, je recalcule la requete de ce sous formulaire automatique. Ma liste modifiable est présente dans ma requete. Peut-être est-ce le lien.

    Si cela ne t'aide pas beaucoup plus, merci beaucoup pour m'avoir consacré un peu de ton temps. Et peut-être que demain j'aurais une révélation, qui sait... ;-)
    0
  9. blux Messages postés 5033 Date d'inscription   Statut Modérateur Dernière intervention   3 455
     
    Ca y est :

    Forms![A]![Tab_Client].Form.RecordSource = StrSql

    A est le form qui contient Tab_Client...
    0
  10. EBasta Messages postés 37 Statut Membre 31
     
    Bonjour,

    Si [Ajout voies] et [SF Liste voies par quartier] ne sont pas activés/sélectionnés, la commande devrait être :

    Forms![Ajout voies]![SF Liste voies par quartier].Form.RecordSource = req

    Sinon, il est possible d'activer avant le formulaire parent/père et de saisir...

    Me![SF Liste voies par quartier].Form.RecordSource = req

    ... ou avant d'activer le sous-formulaire [SF Liste voies par quartier], et de saisir :

    Me.Recordsource = req

    Derrière, il faut garder le Requery.

    Si je ne me trompe pas, ça devrait marcher !
    0
  11. Lazarey Messages postés 3255 Date d'inscription   Statut Membre Dernière intervention   745
     
    MERCI MERCI BLUX et EBASTA !!!!!!!
    C'est bon ça fonctionne impec.
    Merci de m'avoir aidé !!!!!!!!!
    Et Blux merci bcp de m'avoir accordé de ton temps !!!!!!!!

    Je peux donc classer le problème comme RÉSOLU !!!!!!!!!!
    0