Как программно узнать названия таблиц в mdf файле?

donpauls
Дата: 30.12.2011 15:46:48
Существует ли какой-то SQL запрос или VBA функция для того, чтобы из определенного файла узнать имена всех таблиц, который он содержит?
Анатолий ( Киев )
Дата: 30.12.2011 16:09:57
MDF или, все же, MDB?

ADO - метод OpenSchema (открывает Recordset)
DAO - коллекция TableDefs
ADOX - коллекция Tables
studieren
Дата: 30.12.2011 16:23:12
donpauls,

Если речь всё таки идёт о таблицах SQL Server, то тогда отправьте вот такой запрос к серверу и он Вам честно скажет какие таблицы он имеет.
SELECT
     O.Object_id AS ID,
     O.name AS ObjectName,
     O.Schema_id,
     S.Name AS [Schema],
     O.Parent_object_id,
     O.Type,
     O.Type_desc,
     O.Create_date,
     O.Modify_date
FROM sys.all_objects AS O INNER JOIN sys.schemas AS S
     ON O.Schema_id = S.Schema_id
WHERE O.Type In ('S ', 'U ')


А если уберете фильтр "WHERE", то получите весь список объектов сервера.
Guest33
Дата: 30.12.2011 16:28:35
Для MS SQL (MDF) - запрос к серверу - имена User Tables
select [name] from sysobjects where xtype='U'
donpauls
Дата: 17.02.2012 12:24:49
Анатолий ( Киев )
MDF или, все же, MDB?



Ой, ошибочка...
Да, действительно, я имел в виду MDB...
mds_world
Дата: 17.02.2012 12:54:28
donpauls
Анатолий ( Киев )
MDF или, все же, MDB?



Ой, ошибочка...
Да, действительно, я имел в виду MDB...

Запрос к системной таблице MSysObjects может не дать результата, таблица может быть недоступна. Хотя все необходимые данные в ней есть.

Можно через ADOX. Смотрите здесь http://hiprog.com/index.php?option=com_content&task=view&id=251661555&Itemid=35

Или DAO
Sub enginef()
    Dim dbContact As Database, tdf As TableDef
    Set dbContact = DBEngine.Workspaces(0).OpenDatabase("c:\example.mdb", False)
    For Each tdf In dbContact.TableDefs
        Debug.Print tdf.Name
    Next
End Sub
Анатолий ( Киев )
Дата: 17.02.2012 13:28:53
Еще можно через ADO:
Dim rstSchema
    Set rstSchema = CurrentProject.Connection.OpenSchema(20) 'adSchemaTables = 20
 Do Until rstSchema.EOF
Debug.Print rstSchema("TABLE_TYPE"); Tab; rstSchema("TABLE_NAME")
        rstSchema.MoveNext
 Loop