ms-access - tipos - que es una tabla en access
¿Cómo puedo obtener nombres de tablas de una base de datos MS Access? (7)
Microsoft SQL Server y MySQL tienen una tabla INFORMATION_SCHEMA que puedo consultar. Sin embargo, no existe en una base de datos de MS Access.
¿Hay un equivalente que pueda usar?
Aquí hay una respuesta actualizada que funciona en Access 2010 VBA utilizando objetos de acceso a datos (DAO). El nombre de la tabla se guarda en TableDef.Name. La colección de todas las definiciones de tablas se guarda en TableDefs. Aquí hay un ejemplo rápido de bucle a través de los nombres de la tabla:
Dim db as Database
Dim td as TableDef
Set db = CurrentDb()
For Each td In db.TableDefs
YourSubTakingTableName(td.Name)
Next td
La información del esquema que está diseñada para ser muy similar a la del SQL_92 INFORMATION_SCHEMA se puede obtener para el motor Jet / ACE (que es lo que supongo que quiere decir con ''acceso'') a través de los proveedores OLE DB.
Ver:
Mejor no meterse con msysObjects (en mi humilde opinión).
CurrentDB.TableDefs
CurrentDB.QueryDefs
CurrentProject.AllForms
CurrentProject.AllReports
CurrentProject.AllMacros
Obteniendo una lista de tablas:
SELECT
Table_Name = Name,
FROM
MSysObjects
WHERE
(Left([Name],1)<>"~")
AND (Left([Name],4) <> "MSys")
AND ([Type] In (1, 4, 6))
ORDER BY
Name
Para construir sobre la respuesta de Ilya, intente con la siguiente consulta:
SELECT MSysObjects.Name AS table_name
FROM MSysObjects
WHERE (((Left([Name],1))<>"~")
AND ((Left([Name],4))<>"MSys")
AND ((MSysObjects.Type) In (1,4,6)))
order by MSysObjects.Name
(este funciona sin modificación con un MDB)
Los usuarios de ACCDB pueden necesitar hacer algo como esto
SELECT MSysObjects.Name AS table_name
FROM MSysObjects
WHERE (((Left([Name],1))<>"~")
AND ((Left([Name],4))<>"MSys")
AND ((MSysObjects.Type) In (1,4,6))
AND ((MSysObjects.Flags)=0))
order by MSysObjects.Name
Como hay una tabla adicional incluida que parece ser una tabla del sistema de algún tipo.
Puede usar esquemas en Access.
Sub ListAccessTables2(strDBPath)
Dim cnnDB As ADODB.Connection
Dim rstList As ADODB.Recordset
Set cnnDB = New ADODB.Connection
'' Open the connection.
With cnnDB
.Provider = "Microsoft.Jet.OLEDB.4.0"
.Open strDBPath
End With
'' Open the tables schema rowset.
Set rstList = cnnDB.OpenSchema(adSchemaTables)
'' Loop through the results and print the
'' names and types in the Immediate pane.
With rstList
Do While Not .EOF
If .Fields("TABLE_TYPE") <> "VIEW" Then
Debug.Print .Fields("TABLE_NAME") & vbTab & _
.Fields("TABLE_TYPE")
End If
.MoveNext
Loop
End With
cnnDB.Close
Set cnnDB = Nothing
End Sub
De: http://msdn.microsoft.com/en-us/library/aa165325(office.10).aspx
SELECT
Name
FROM
MSysObjects
WHERE
(Left([Name],1)<>"~")
AND (Left([Name],4) <> "MSys")
AND ([Type] In (1, 4, 6))
ORDER BY
Name