Microsoft SQL Server et MySQL ont une table INFORMATION_SCHEMA que je peux interroger. Cependant, il n'existe pas dans une base de données MS Access.
Y a-t-il un équivalent que je peux utiliser?
Pour construire sur la réponse d'Ilya, essayez la requête suivante:
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
(celui-ci fonctionne sans modification avec un MDB)
Les utilisateurs d’ACCDB peuvent avoir besoin de faire quelque chose comme ça
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
Comme il y a une table supplémentaire est inclus qui semble être une table système de quelque sorte.
Vous pouvez utiliser des schémas dans 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
Voici une réponse mise à jour qui fonctionne dans Access 2010 VBA à l'aide de DAO (Data Access Objects). Le nom de la table est contenu dans TableDef.Name. La collection de toutes les définitions de table est conservée dans TableDefs. Voici un exemple rapide de boucle dans les noms de table:
Dim db as Database
Dim td as TableDef
Set db = CurrentDb()
For Each td In db.TableDefs
YourSubTakingTableName(td.Name)
Next td
Des informations de schéma conçues pour être très proches de celles de SQL_92 INFORMATION_SCHEMA peuvent être obtenues pour le moteur Jet/ACE (c'est ce que je veux dire par accès) via les fournisseurs de base de données OLE.
Voir:
Obtenir une liste de tables:
SELECT
Table_Name = Name,
FROM
MSysObjects
WHERE
(Left([Name],1)<>"~")
AND (Left([Name],4) <> "MSys")
AND ([Type] In (1, 4, 6))
ORDER BY
Name
SELECT
Name
FROM
MSysObjects
WHERE
(Left([Name],1)<>"~")
AND (Left([Name],4) <> "MSys")
AND ([Type] In (1, 4, 6))
ORDER BY
Name
Mieux vaut ne pas jouer avec msysObjects (IMHO).
CurrentDB.TableDefs
CurrentDB.QueryDefs
CurrentProject.AllForms
CurrentProject.AllReports
CurrentProject.AllMacros