2008-10-14 22 views

Respuesta

47

Para construir sobre la respuesta de Ilya intente lo 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 

(éste funciona sin modificación con un MDB)

usuarios 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.

+17

Registro (s) no se puede leer; sin permiso de lectura en 'MSysObjects'. –

+0

Ese artículo getSchema ya no está presente. –

+0

He actualizado mi respuesta con detalles del sitio web 404. – BIBD

1

Obtener 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 
+1

Funciona en las antiguas versiones de acceso solamente. –

+0

Los MsysObjects son tablas de sistema no compatibles y no deben utilizarse. Los permisos en estas tablas fuera de MS Access pueden ser muy arriesgados. – Fionnuala

2

La información del esquema que está diseñado para ser muy cercana a la de la INFORMATION_SCHEMA SQL-92 puede ser obtenida para el motor Jet/ACE (que es lo que usted asume significa 'acceso') a través de los proveedores OLE DB.

Ver:

OpenSchema Method (ADO)

Supported Schema Rowsets

9

Usted puede utilizar esquemas de acceso.

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 

Desde: http://msdn.microsoft.com/en-us/library/aa165325(office.10).aspx

+0

Esto fue útil para leer los nombres de tablas de Excel, ¡gracias! – enderland

0
SELECT 
Name 
FROM 
MSysObjects 
WHERE 
(Left([Name],1)<>"~") 
AND (Left([Name],4) <> "MSys") 
AND ([Type] In (1, 4, 6)) 
ORDER BY 
Name 
+1

Los MsysObjects son tablas de sistema no compatibles y no deben utilizarse. Los permisos en estas tablas fuera de MS Access pueden ser muy oportunos – Fionnuala

5

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í está un ejemplo rápido de bucle a través de los nombres de tabla:

Dim db as Database 
Dim td as TableDef 
Set db = CurrentDb() 
For Each td In db.TableDefs 
    YourSubTakingTableName(td.Name) 
Next td 
0

mejor que no se meta con MSysObjects (en mi humilde opinión).

CurrentDB.TableDefs 
CurrentDB.QueryDefs 
CurrentProject.AllForms 
CurrentProject.AllReports 
CurrentProject.AllMacros 
Cuestiones relacionadas