Получение списка имен таблиц в Access #102348


#0 by Eldorado
Мне нужно получить из Access данные. Но так как заранее структура БД не известна, то я так понимаю нужно узнать имена всех таблиц в БД, а потом уже сязываться с ними по имени.Возможно есть другие методы...Не знаю... Вообщем как получить этот список имен? Спасибо заранее.
#1 by OFF
Поройся на про клабе, было чет типа "шлюз Access" /
#2 by ШтушаКутуша
через ADO?
#3 by Николай из Ступино
Перем Access, БД, ТаблицыБД, Сч, ТаблицаБД, ИмяТаблицыБД; Access = СоздатьОбъект ("Access.Application"); Access.Visible = 1; Access.OpenCurrentDatabase ("C:New.mdb"); БД = Access.CurrentDb ; ТаблицыБД = СоздатьОбъект ("СписокЗначений"); Для Сч = 0 По БД.TableDefs.Count - 1 Цикл ТаблицаБД = БД.TableDefs.Item (Сч);    ИмяТаблицыБД = ТаблицаБД.Name;    Если Найти (ИмяТаблицыБД, "MSys") > 0 Тогда     Продолжить;    КонецЕсли; // Найти (ИмяТаблицы, "MSys") > 0    ТаблицыБД.ДобавитьЗначение (ИмяТаблицыБД);    Сообщить (ИмяТаблицыБД); КонецЦикла; Eldorado, проверял - работает. Удачи !
#4 by Николай из Ступино
Eldorado, если есть вопросы насчёт доступа к записям таблиц, выкладывай. Чем смогу - помогу.
#5 by Eldorado
Спасибо Николай из Ступино за пример.Но мне показалось это немного медленно.И еще Access открывается.А вот через ADO никак нельзя сделать?
#6 by Николай из Ступино
Eldorado, надо по сусекам памяти порыться. Давно уже ADO не пользовался, в основном DAO. Подожди, что-нибудь придумаем.
#7 by Asmody
adox=СоздатьОбъект("ADOX.Catalog"); adox.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+FileName;   ВсегоТаблиц=adox.Tables.Count; Для ии=0 По ВсегоТаблиц-1 Цикл      Сообщить(""+adox.Tables(ии).Name); КонецЦикла;
#8 by Eldorado
Спасибо Asmody, вроде имена получить можно.Только вот помимо созданных мною таблиц еще вот такие.Это нормально или как? MSysAccessObjects MSysAccessXML MSysACEs MSysObjects MSysQueries MSysRelationships
#9 by Николай из Ступино
Это системные таблицы. adox=СоздатьОбъект("ADOX.Catalog"); adox.ActiveConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+FileName;   ВсегоТаблиц=adox.Tables.Count; Для ии=0 По ВсегоТаблиц-1 Цикл     ИмяТаблицы = adox.Tables(ии).Name;;   Если Найти (ИмяТаблицы, "MSys") > 0 Тогда    Продолжить;   КонецЕсли;   Сообщить(""+ИмяТаблицы); КонецЦикла;
#10 by Николай из Ступино
Asmody, спасибо за информацию. Никогда раньше не работал с ADO в 1C.
#11 by Asmody
в Access: Сервис - Параметры - Вид - Отображать: скрытые, системные объекты
#12 by Николай из Ступино
Asmody, при обращении к Access извне эта настройка игнорируется.
#13 by Asmody
ясен перец. это ответ на . т.е. эти таблицы в БД есть, но их дефолтом не видно. кста, можно еще запрос сделать типа: SELECT Name, Type FROM MSysObjects WHERE Type=1 тоже выдаст имена всех таблиц
#14 by Eldorado
Спасибо всем за помощь.И еще один вопрос. Может не по теме..Просто не хотелось отдельно тему создавать.Чтоб с Access-ом работать, что кроме 1С должно быть на компе: cам Access , может какие библиотеки, модули  и т.д. ?
#15 by Asmody
Чтоб с Access-ом работать Access должен быть, ясен перец. А вот чтобы с mdb-файлами - не обязательно.
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С