Nombres de columnas de una tabla

Resuelto
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. 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. 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. 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
    1. 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. Désolé, je ne peux pas vous aider avec ça.
        0
    2. 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