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

Requêtes et SQL. Discussion :

DAO.Recordset ou Form.RecordSource ?


Sujet :

Requêtes et SQL.

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 138
    Points : 67
    Points
    67
    Par défaut DAO.Recordset ou Form.RecordSource ?
    Bonjour à vous,

    En parcourant ce site et internet je ne trouve pas de réponse pour m'orienter vers telle ou telle façon de coder : DAO ou RecordSource ?

    En fait, comme toutes bases Access, j'ai des formulaires et des tables. J'essaye de créer le moins de requêtes possibles directement avec Access en les créant plutôt en VBA et de façon dynamique. Par exemple, le même code créant une requête sql va être le même, quelque soit le formulaire afficher à l'écran. Pour cela j'utilise le RecordSource de mes formulaires. Code exemple :

    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
     
    '================================================================================================
    'CHAINE SQL INITIALE DU FORMULAIRE-LISTE
    '================================================================================================
    Public Function fctChaineInitialeFormListeSTR( _
                                                    ByVal ActionSTR As String)
        'Déclaration
        Dim ChaineSqlSTR As String  'chaine SQL
        Dim WhereSqlSTR As String   'filtre via le WHERE de la requête
     
        ' Définir l'option WHERE de la requête avant de définir la chaine de requête
        WhereSqlSTR = ""
        If ActionSTR <> "" Then WhereSqlSTR = "WHERE (((R__Select_LocalSelect.Select_ActionTxt)=" & Chr(34) & ActionSTR & Chr(34) & "));"
     
        ' Définir la chaine de requête
        ChaineSqlSTR = "SELECT DISTINCTROW " & FormEnCoursCtrlsrceiniSTR & ".*, R__Select_LocalSelect.* " _
                       & "FROM " & FormEnCoursCtrlsrceiniSTR & " " _
                       & "LEFT JOIN R__Select_LocalSelect " _
                       & "ON " & FormEnCoursCtrlsrceiniSTR & "." & FormEnCoursChampcleSTR & " = " _
                       & "R__Select_LocalSelect.Select_CleidTxt " _
                       & WhereSqlSTR
     
        CadreFRM.Form.RecordSource = ChaineSqlSTR
    End Function

    Ce n'est qu'un exemple où on voit que je crée en VBA la chaine sql au format String pour ensuite l'ajouter en tant que Source de mes formulaires.

    Ayant un autre formulaire contenant des contrôles (listes, texte, etc) qui servent de filtre, je souhaite imbriquer des Chaine Sql l'une dans l'autre de type : ChaineSqlSTR = "SELECT * FROM " & ChaineSqlSTR & "Where " & MonNouveauFiltre

    Mais avant de m'engager trop dans cette direction, je souhaitais savoir s'il était possible de gérer ce genre de chose avec le DAO, c'est-à-dire pouvoir avoir un formulaire dont la source est un Recordset DAO et pouvoir modifier cette source pour lui appliquer des filtres en fonction de différents contrôles de mon formulaire de filtres ?

    En fait, on voit dans les tuto, ... que le Recordset DAO est à chaque fois crée pour faire une action. Mais moi, je souhaite pouvoir modifier le Recordset DAO avec différents boutons sur mon formulaire. Du coup, le Recordsert resterait ouvert le temps que le formulaire est ouvert puis serait refermé et vidé lorsque le formulaire est fermé, bien-sûr en ayant pris soin d'avoir enregistré les modifications, ajouts et suppressions d'enregistrements dans les tables adéquates. Je n'arrive pas à trouver un tuto ou des exemples de code DAO permettant cela.

    Excellent week-end

  2. #2
    Expert éminent sénior

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Points : 32 311
    Points
    32 311
    Par défaut
    En fait, comme toutes bases Access, j'ai des formulaires et des tables. J'essaye de créer le moins de requêtes possibles directement avec Access en les créant plutôt en VBA et de façon dynamique
    C'est dommage. Les requêtes paramétrées permettent de s'affranchir du typage et des syntaxes genre """ ou "'" dans le code VBA.

    Pour associer un recordset ouvert (oRst) à un formulaire, il suffit de faire :


  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 138
    Points : 67
    Points
    67
    Par défaut
    Merci Tofalu pour ton aide

    Créer quelques requêtes VBA qui servent pour l'ensemble des formulaires, cela évite une longue maintenance en cas de modification et lorsqu'on a plus d'une centaine de formulaire

    Pour situer, chaque domaine (factures, fournisseurs, etc) a :
    - un formulaire "liste" (suffixe "__Lst") affichant la liste des enregistrements. Sa source est une requête type créée par VBA combinant la table correspondante qui est sur le réseau et une requête qui sert à savoir quels enregistrements sont déjà en cours de sélection, de modifications ou de suppression par d'autres utilisateurs.
    - un formulaire "détail" (suffixe "__Dtl") affichant les données de l'enregistrement sélectionné dans la liste. Sa source est une requête manuelle (c'est-à-dire créée dans le champ "Source" de ses propriétés).
    - un formulaire "recherche" (suffixe "__Rch") contenant les champs servant aux filtres. Sa source manuelle non affichée contient la requête contenant l'ensemble des tables liées entre elles et contenant les champs nécessaires aux filtres. Bien-sûr il y a au moins la table du formulaire "liste".

    Ces requêtes ont toujours le même principe, quelque soit le trio de formulaires :
    1) Créer le Recordsource du formulaire "liste".
    2) Reprendre le Recordsource du formulaire "recherche" et lui appliquer les filtres.
    3) Faire ressortir la liste des clés issues du résultat du point (2) et sans doublons.
    4) Combiner cette dernière liste et le Recordsource du formulaire "liste" afin que ce dernier n'affiche que les enregistrements ayant une clé présente dans la liste des clés.

    Les points 2 à 3 doivent se faire à chaque changement fait sur une contrôle du formulaire "Recherche", sachant qu'un filtre d'un contrôle ne remplace pas le filtre d'un autre contrôle. Ils doivent se cumuler. Par exemple, je dois pouvoir lister dans le formulaire "Liste" toutes les personnes du sexe "Masculine" et étant à la fois "Agriculteur" et "Boulanger".

    J'avoue que je peine un peu à appliquer les filtres cumulés.

    A) Selon votre expérience, est il plus facile de créer 'ladite liste des clés filtrées' en DAO ou en imbriquant des requêtes sql ?

    B) Et dans le cas d'une grosse base de données (tables contenant plusieurs milliers d'enregistrements et avec plusieurs dizaines de champs), est ce qu'il y a une de ces deux méthodes qui va beaucoup "ramer" lors de ces traitements ?

Discussions similaires

  1. [DAO]Recordset DAO sans doublons
    Par amalane dans le forum VBA Access
    Réponses: 2
    Dernier message: 20/04/2007, 19h09
  2. [DAO]Recordset et Problème de cotes dans la clause where
    Par fabiolous dans le forum VBA Access
    Réponses: 31
    Dernier message: 20/04/2007, 16h46
  3. Réponses: 2
    Dernier message: 08/12/2006, 11h09
  4. [VBA] Utilisation de DAO.recordset
    Par kissmytoe dans le forum Access
    Réponses: 2
    Dernier message: 14/03/2006, 08h54
  5. Bookmark de Form et de DAO.Recordset
    Par CRUSOE13 dans le forum Access
    Réponses: 4
    Dernier message: 23/06/2005, 11h27

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