Nombres de columnas de una tabla

Resuelto
Nicolas -  
 salem -
Hola,
estoy desarrollando una aplicación VBA en Access XP y me gustaría crear una consulta que me permita obtener los nombres de las columnas de cada tabla en mi base de datos.

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

Ya he realizado una consulta similar en SQL Server, sin embargo (incluso mostrando los objetos del sistema) no he encontrado ninguna tabla en Access que agrupe esos datos.
La única información que he encontrado se refiere a Access 97 y ya no funciona... (en esa versión había una tabla syscolumns).

Si alguien tiene alguna idea,
Gracias.

4 respuestas

  1. Usuario anónimo
     
    Hola,

    En ausencia de una consulta SQL, este pequeño código VBA te permitirá
    conocer los nombres de las columnas.

    Este código se inserta en un formulario que apunta a una
    consulta global de una tabla.

     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

      Para listar todos los campos de cada tabla o de todas las tablas de una MDB en curso

      Necesario y obligatorio
      Menú principal: Herramientas - Referencias
      Marcado: Microsoft DAO 3.6 Object Library

      Sub Tablas_y_campos()

      'Declaración de variables
      Dim dbd As DAO.Database
      Dim tbd As DAO.TableDef
      Dim fld As DAO.Field

      'Acceso a la MDB en curso
      Set dbd = CurrentDb

      'Por cada tabla de la MDB en curso
      For Each tbd In dbd.TableDefs

      'Por cada campo en cada tabla
      For Each fld In tbd.Fields

      'Muestra en la ventana de ejecución (Menú principal: Vista)
      Debug.Print "Tabla: " & tbd.Name & " Columna: " & fld.Name
      Next
      Next
      Set dbd = Nothing
      End Sub

      Salem
      0
  2. Nico
     
    La idea es buena, gracias, ¡no conocía la propiedad name del recordset!
    Sin embargo, al necesitar obtener todos los nombres de los campos de la base de datos, una consulta select * from todas las tablas sería muy costosa en memoria RAM a mi parecer (la base es bastante pesada).

    He encontrado un procedimiento de este tipo que creo que sería más adecuado:

    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 "Tabla : " & tbd.Name & " Columna : " & fld.Name
    Next
    Next
    End Sub

    Gracias, lupin, fiel a tu puesto, casi has respondido a cada una de mis preguntas :)
    0
  3. random Mensajes publicados 1612 Estado Miembro 155
     
    Normalmente hacemos
    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 tabla " & y.name & "tiene los siguientes campos :")
    for each z in y
    msgbox(z.name 'aquí podemos examinar las otras propiedades del objeto field)
    next z
    next y
    end sub

    es bueno prever una prueba para excluir las tablas del sistema

    --
    ¿no es hermosa la vida?
    0
    1. jmjousse
       
      Désolé, je ne peux pas vous aider avec ça.
      0
  4. belmekki
     
    Voici un exemple de requête SQL qui pourrait répondre à votre demande :

    ```sql
    SELECT nom_condidat
    FROM candidats
    WHERE nom_condidat LIKE '%' || ?;
    ```

    Dans cet exemple, vous pouvez remplacer `?` par la dernière lettre que vous souhaitez filtrer, saisie au clavier. Assurez-vous d'échapper correctement les entrées pour éviter les injections SQL.
    0