Nombres de columnas de una tabla
Resuelto
Nicolas
-
salem -
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.
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
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.
Lupin
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
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 :)
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 :)
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?
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?
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.
```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.
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