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

Résolu/Fermé
Nicolas - 16 mars 2006 à 13:58
 salem - 22 août 2011 à 04:04
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

Utilisateur anonyme
16 mars 2006 à 15:12
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
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
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
random Messages postés 1612 Date d'inscription vendredi 26 novembre 2004 Statut Membre Dernière intervention 30 mars 2006 155
22 mars 2006 à 13:41
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
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
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