[Access & SQL] nom des colonnes d'une table

Résolu
Nicolas -  
 salem -
Bonjour ,
je developpe une application vba sous Access Xp et j'aurais aimer créer une requete me permettant d'obtenir les noms de colonnes de chaque table dans ma base.

ex: select lib_nomcol from table system where nom_table="dde"

J'ai deja réalisé une requete similaire sous sql server, néanmoins (meme en affichant les objets system) je n'est trouvé aucune tables sous access regroupant ces données.
Les seules informations que j'ai trouvé concerne access 97 et ne fonctionne plus...( dans cette versions une table syscolumns etait presente)

Si quelqu'un avait une idée ,
Merci

4 réponses

  1. Utilisateur anonyme
     
    Bonjour,

    A défaut d'une requête SQL, ce petit code VBA vous permettra
    de connaître les noms de colonne !

    Ce code est insérer dans un formulaire qui pointe sur une
    requête globale d'une table.

    Private Sub ExecuteRoutine_Click()
    
    On Error GoTo Err_ExecuteRoutine_Click
    
        Dim NombreChamps, Boucle As Integer
        
        NombreChamps = Me.Recordset.Fields.Count
        
        For Boucle = 0 To (NombreChamps - 1)
            MsgBox Me.Recordset.Fields(Boucle).Name
        Next Boucle
        
    Exit_ExecuteRoutine_Click:
        Exit Sub
    
    Err_ExecuteRoutine_Click:
        MsgBox Err.Description
        Resume Exit_ExecuteRoutine_Click
        
    End Sub
    


    Lupin
    4
    1. salem
       
      Access 2003 VBA

      Pour lister tous les champs de chaque table ou de toutes les tables d'une MDB en cours

      Nécessaire et obligatoire
      Menu principal : Outils - Références
      Coché : Microsoft DAO 3.6 Objet Library

      Sub Tables_et_champs()

      'Déclaration des variables
      Dim dbd As DAO.Database
      Dim tbd As DAO.tabledef
      Dim fld As DAO.Field

      'Prise en main de la MDB en cours
      Set dbd = CurrentDb

      'Pour chaque table de la MDB en cours
      For Each tbd In dbd.TableDefs

      'Pour chaque champ dans chaque table
      For Each fld In tbd.Fields

      'Affiche dans la fenêtre exécution (Menu principale : Affichage)
      Debug.Print "Table : " & tbd.name & " Colonne : " & fld.name
      Next
      Next
      Set dbd = Nothing
      End Sub

      Salem
      0
  2. Nico
     
    L'idée est bonne merci, je ne connaissais pas la propriété name du recordset!
    Néanmoins devant obtenir tout les noms de champs de la base, une requete select* from toute les tables serait tres couteuse en memoire vive a mon avis (la base est assé lourde).

    J'ai trouvé une procedure de ce type la qui a mon avis serais plus adaptée:

    Public Sub test()
    Dim Db As DAO.Database
    Dim tbd As DAO.TableDef
    Dim fld As DAO.Field
    Set Db=CurrentDb
    For Each tbd In Db.TableDefs
    For Each fld In tbd.Fields
    MsgBox "Table : " & tbd.Name & " Colonne : " & fld.Name
    Next
    Next
    End Sub

    Merci , lupin , fidele a ton poste tu as quasiment répondus a chacune de mes questions :)
    0
  3. random Messages postés 1612 Statut Membre 155
     
    ben normalement on fait
    sub mestablesmaschamps
    dim x as dao.database
    dim y as dao.tabledef
    dim z as dao.field
    set x=currentdb()
    for each y in x.tabledefs
    msgbox("la table " & y.name & "a les champs suivants :")
    for each z in y
    msgbox(z.name 'ici on peut scruter les autres propriétes de l'objet field)
    next z
    next y
    end sub

    il est bon de prévoir un test pour écarter les tables systèmes

    0
    1. jmjousse
       
      salut random
      Tout d'abord g honte d'etre aussi nul en vb !!
      j'aimerai realise ce code mais plutot qu'il attaque toutes les tables de la bd je voudrais qu'il le fasse sur une seule !!
      Peux tu me dire comment modifier ton code ?
      Merci d'avance
      jm
      0
  4. belmekki
     
    j'aimerai savoir comment réaliser une requete qui parmet d'aficher des noms (nom condidat) donnés dont la dernière lettre et saisie au clavier
    0