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 :

Parcourir les tables d'une base Access


Sujet :

Requêtes et SQL.

  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2018
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Octobre 2018
    Messages : 13
    Points : 14
    Points
    14
    Par défaut Parcourir les tables d'une base Access
    Bonjour !
    Je suis alternante dans un labo et j'ai une base avec 11 tables.
    Je dois récupérer une colonne qui est commune à chaque table mais je ne vois pas comment faire. Je sais le faire sur une table mais je ne vois pas comment parcourir toutes les tables...
    J'ai voulu tenter une procédure mais quand je regarde son principe sur l'aide de Microsoft il dit que Access ne prend pas en compte ce type d'outils...

    Quelqu'un pourrait-il m'aider svp ^^ ?
    Merci !
    Bonne journée

  2. #2
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 087
    Points : 5 203
    Points
    5 203
    Par défaut
    Bonjour,

    "Récupérer" ça ne veut pas dire grand chose, pour en faire quoi ?

    On peut parcourir toutes les tables grace à la table interne tabledefs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim tbd As DAO.TableDef, fld As DAO.Field
    For Each tbd In current.TableDefs
      For Each fld In tbd.Fields
        msgbox tbd.name & "." & fld.Name
    Next: Next
    Utilisez Planet, gestion d'entreprise gratuite pour TPE / PME

  3. #3
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2018
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Octobre 2018
    Messages : 13
    Points : 14
    Points
    14
    Par défaut
    Bonjour et merci de bien vouloir m'aider.
    Je vais mieux m'exprimer ce sera plus simple x) !

    Dans chaque table contenant chacune des produits, y a la colonne "dateExpiration", avec cette colonne j'utilise la fonction DateDiff pour savoir les produits ayant un nombre de jours restants avant expiration <= 31. Par la suite, je souhaite créer un formulaire qui va répertorier tous les produits respectant cette condition. J'ai réussi à le faire en faisant une requête/table et donc un formulaire/table mais je trouve que c'est bof...j'aurai voulu l'optimiser ^^ !

    Merci pour ton exemple mais j'aurai une autre question qui peut paraître bête...comment fait-on pour utiliser les procédures sous Access ? Faut-il créer un module ? ou un évènement sur le formulaire ? Je n'ai utilisée les procédures qu'avec Oracle donc sur Access je vois pas comment faire pour les exécuter...

    Merci !
    Bonne journée

  4. #4
    Expert éminent
    Homme Profil pro
    Webplanneur
    Inscrit en
    Octobre 2007
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Réunion

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 262
    Points : 6 561
    Points
    6 561
    Par défaut
    Salut,
    Il vous faut aller dans l'environnement vba de votre bdd Acc, raccourci clavier (Alt F11) ou onglet Outils base de données - Visual basic
    Vous pouvez associer la proc sur un évènement.
    Dans l'exemple corrigé, la proc est associé à l'évènement sur click() d'un bouton de commande.
    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
    Private Sub Commande7_Click()
    Dim dbs As DAO.Database
    Dim tdf As DAO.TableDef
    Dim fld As DAO.Field
     
    Set dbs = CurrentDb()
     
    For Each tdf In dbs.TableDefs
        If Not (tdf.Name Like "MSys*" Or tdf.Name Like "~*") Then
            For Each fld In tdf.Fields
            MsgBox tdf.Name & "." & fld.Name
            Next
        End If
    Next
     
    Set dbs = Nothing
    End Sub
    "Le savoir est la seule matière qui s'accroit quand on la partage" (Socrate)
    UR - ESIROI - GPME/CG/DCG8
    QTH :21°19'18"S - 055°25'32"E
    Inutile de me contacter par MP
    Merci de cliquer sur si la réponse vous a permis de résoudre votre problème et n'oubliez pas de clôturer le fil en cliquant sur

  5. #5
    Expert éminent
    Homme Profil pro
    Webplanneur
    Inscrit en
    Octobre 2007
    Messages
    4 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : Réunion

    Informations professionnelles :
    Activité : Webplanneur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 262
    Points : 6 561
    Points
    6 561
    Par défaut
    Concernant vos 11 tbl, sont-elles en relation les unes avec les autres ? Éventuellement faire une capture d'écran de la fenêtre des relations.
    Sinon votre approche avec DiffDate() est correcte.
    Peut-être pourriez-vous en place une MFC sur votre champ calculé DiffDate()
    Images attachées Images attachées  
    "Le savoir est la seule matière qui s'accroit quand on la partage" (Socrate)
    UR - ESIROI - GPME/CG/DCG8
    QTH :21°19'18"S - 055°25'32"E
    Inutile de me contacter par MP
    Merci de cliquer sur si la réponse vous a permis de résoudre votre problème et n'oubliez pas de clôturer le fil en cliquant sur

  6. #6
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2018
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Octobre 2018
    Messages : 13
    Points : 14
    Points
    14
    Par défaut
    Merci beaucoup pour votre réponse !
    Alors nan les tables ne sont pas liées entre elles...
    C'est une base datant de 2001 donc y a pas mal de fichiers qui ne servent plus mais j'ose pas y toucher lol !

    J'ai un autre problème...en parcourant chaque table de la base je souhaite y effectuer une requête SQL.
    Voici le code :
    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    Sub TestFessy()
    Dim i As Integer
     
    Dim tsql As String
     
    Dim rs As Recordset
     
        For i = 0 To CurrentDb.TableDefs.Count - 1
     
        'il faut enlever les tables systèmes
     
        If Not (CurrentDb.TableDefs(i).Name Like "MSys*" Or CurrentDb.TableDefs(i).Name Like "~*") Then
     
        Debug.Print CurrentDb.TableDefs(i).Name
     
        'Exemple de génération de requête de sélection avec le nom de la table et test de sélection sur date
     
        tsql = "SELECT Noms FROM " & CurrentDb.TableDefs(i).Name & " Where Noms = Coca;"
     
        Set rs = CurrentDb.OpenRecordset(tsql)
     
        Do While Not rs.EOF
     
            Debug.Print rs!dateCreation
     
            rs.MoveNext
     
            Loop
     
        End If
     
        Next i
    End Sub
    Au debuggage, j'ai l'erreur "trop peu de paramètres etc..." et ça me surligne "Set rs = CurrentDb.OpenRecordset(tsql)" pourtant c'est bon nan ? J'ai pas forcément besoin de mettre les arguments option, type, lockedit si ? D'ailleurs même quand je les mets ça bug donc...

  7. #7
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Bonjour.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "SELECT Noms FROM [" & CurrentDb.TableDefs(i).Name & "] Where Noms = ""Coca"";"
    En Access les delimiteurs sont :

    • Pour les textes : les guillemets (") ou l'apostrophe (').
      Quand tu utilises les guillemets dans une chaine, il faut les doubler.
    • Pour les dates : le diese (#).
      Personnellement je mets toujours mes dates au format AAAA-MM-JJ meme si le format interne de Access est MM-JJ-AAAA car je trouve que cela evite la confusion entre le mois et le jour.
    • Pour les autres : pas de delimiteur


    Note aussi que les solutions SQL sont generalement plus performantes que celle en VBA.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

Discussions similaires

  1. Parcourir les tables d'une base donnée (et de données)
    Par temoanatini dans le forum Administration
    Réponses: 3
    Dernier message: 03/10/2008, 14h51
  2. parcourir les tables d'une base HyperFile
    Par foulla dans le forum HyperFileSQL
    Réponses: 8
    Dernier message: 17/05/2008, 16h30
  3. [VB6] Lister les tables d'une base access
    Par eagleleader dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 21/02/2008, 14h41
  4. Réponses: 2
    Dernier message: 25/06/2006, 20h06
  5. [ODBC] Intranet en PHP : Lister les tables d'une base Access
    Par fblouet dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 28/10/2003, 14h46

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