Понедельник, 06.05.2024, 07:56
Приветствую Вас Гость | RSS
Категории раздела
Вход на сайт
Поиск
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0

MS Access - разработка баз под заказ

Каталог статей


Получить списки таблиц, запросов, форм, отчётов, макросов, модулей

Иногда бывает надо получить список присутствующих в базе элементов. Причины могут быть самые разные. Самое простое - пройтись циклом по соответствующим семействам. И так, приступим.

Таблицы

Список таблиц.

Sub AllTables()
 Dim obj As AccessObject, dbs As Object
 Set dbs = Application.CurrentData
 ' Search for open AccessObject objects in AllTables collection.
 For Each obj In dbs.AllTables
 ' Print name of obj.
 Debug.Print obj.Name
 Next obj
End Sub


Выводятся все таблицы вне зависимости от того локальные они или линкованные.
Можно исключить системные таблицы

Sub UserTables()
 Dim obj As AccessObject, dbs As Object
 Set dbs = Application.CurrentData
 ' Search for open AccessObject objects in AllTables collection.
 For Each obj In dbs.AllTables
 If Left(obj.Name, 4) <> "MSys" Then 
 If Left(obj.Name, 1) <> "~" Then 
 ' Print name of obj.
 Debug.Print obj.Name
 end if
 End If
 Next obj
End Sub


Можно вывести список открытых таблиц

Sub OpenTables()
 Dim obj As AccessObject, dbs As Object
 Set dbs = Application.CurrentData
 ' Search for open AccessObject objects in AllTables collection.
 For Each obj In dbs.AllTables
 If obj.IsLoaded = True Then
 ' Print name of obj.
 Debug.Print obj.Name
 End If
 Next obj
End Sub


Можно так же уточнить, в каком режиме открыта таблица - в обычном или режиме конструктора (иногда бывает нужно).

Sub OpenTables()
 Dim obj As AccessObject, dbs As Object
 Set dbs = Application.CurrentData
 ' Search for open AccessObject objects in AllTables collection.
 For Each obj In dbs.AllTables
 If obj.IsLoaded = True Then
 ' Print name of obj.
 Debug.Print obj.Name, obj.CurrentView
 ' CurrentView = 0 as acCurViewDesign
 ' CurrentView = 2 as acCurViewDatasheet 
 End If
 Next obj
End Sub

Список таблиц можно получить и вот так, через DAO

Sub AllTablesDAO()
 Dim dbs As Database, tdf As TableDef
 Set dbs = CurrentDb
 
 For Each tdf In dbs.TableDefs
 ' Print name of obj.
 Debug.Print tdf.Name
 Next tdf
 
 Set tdf = Nothing
 dbs.Close
 Set dbs = Nothing
End Sub

Теперь перейдём к запросам.

Запросы

Sub AllQueries()
 Dim obj As AccessObject, dbs As Object
 Set dbs = Application.CurrentData
 ' Search for open AccessObject objects in AllQueries collection.
 For Each obj In dbs.AllQueries
 ' Print name of obj.
 Debug.Print obj.Name
 Next obj
End Sub


Можно так же определить, какие из запросов открыты в настоящее время и в каком режиме

Sub OpenQueries()
 Dim obj As AccessObject, dbs As Object
 Set dbs = Application.CurrentData
 ' Search for open AccessObject objects in AllQueries collection.
 For Each obj In dbs.AllQueries
 If obj.IsLoaded = True Then
 ' Print name of obj.
 Debug.Print obj.Name, obj.CurrentView
 ' CurrentView = 0 as acCurViewDesign
 ' CurrentView = 2 as acCurViewDatasheet 
 End If
 Next obj
End Sub


Формы

Sub AllForms1()
 Dim obj As AccessObject, dbs As Object
 Set dbs = Application.CurrentProject
 ' Search for open AccessObject objects in AllForms collection.
 For Each obj In dbs.AllForms
 ' Print name of obj.
 Debug.Print obj.Name
 Next obj
End Sub


Можно так же определить, какие из форм открыты в настоящее время и в каком режиме

Sub OpenForms()
 Dim obj As AccessObject, dbs As Object
 Set dbs = Application.CurrentProject
 ' Search for open AccessObject objects in AllForms collection.
 For Each obj In dbs.AllForms
 If obj.IsLoaded = True Then
 ' Print name of obj.
 Debug.Print obj.Name, obj.CurrentView
 ' CurrentView = 0 as acCurViewDesign
 ' CurrentView = 1 as acCurViewFormBrowse
 ' CurrentView = 2 as acCurViewDatasheet 
 ' CurrentView = 3 as acCurViewPivotTable 
 End If
 Next obj
End Sub


Отчёты

Получить список отчётов

Sub AllReports()
 Dim obj As AccessObject, dbs As Object
 Set dbs = Application.CurrentProject
 ' Search for open AccessObject objects in AllReports collection.
 For Each obj In dbs.AllReports
 ' Print name of obj.
 Debug.Print obj.Name
 Next obj
End Sub


Можно так же определить, какие из отчётов открыты в настоящее время и в каком режиме

Sub OpenReports()
 Dim obj As AccessObject, dbs As Object
 Set dbs = Application.CurrentProject
 ' Search for open AccessObject objects in AllReports collection.
 For Each obj In dbs.AllReports
 If obj.IsLoaded = True Then
 ' Print name of obj.
 Debug.Print obj.Name, obj.CurrentView
 ' CurrentView = 0 as acCurViewDesign
 ' CurrentView = 5 as acCurViewPreView
 ' CurrentView = 6 as acCurViewReportBrowse
 ' CurrentView = 7 as acCurViewLayout
 End If
 Next obj
End Sub


Макросы

Список макросов

Sub AllMacros()
 Dim obj As AccessObject, dbs As Object
 Set dbs = Application.CurrentProject
 ' Search for open AccessObject objects in AllMacros collection.
 For Each obj In dbs.AllMacros
 ' Print name of obj.
 Debug.Print obj.Name
 Next obj
End Sub


Можно так же определить, какие из макросов открыты в настоящее время и в каком режиме (а режим пока один - режим конструктора)

Sub OpenMacros()
 Dim obj As AccessObject, dbs As Object
 Set dbs = Application.CurrentProject
 ' Search for open AccessObject objects in AllMacros collection.
 For Each obj In dbs.AllMacros
 If obj.IsLoaded = True Then
 ' Print name of obj.
 Debug.Print obj.Name, obj.CurrentView
 ' CurrentView = 0 as acCurViewDesign
 End If
 Next obj
End Sub


Модули

Список модулей

Sub AllModules()
 Dim obj As AccessObject, dbs As Object
 Set dbs = Application.CurrentProject
 ' Search for open AccessObject objects in AllTables collection.
 For Each obj In dbs.AllModules
 ' Print name of obj.
 Debug.Print obj.Name
 Next obj
End Sub


Наличие модулей у форм и отчётов так определить нельзя. Они не выводятся. Для этого необходимо открыть отчёт или форму и проверить свойство HasModule
Можно так же определить, какие из модулей открыты в настоящее время и в каком режиме (а режим пока один - режим конструктора)

Sub OpenModules()
 Dim obj As AccessObject, dbs As Object
 Set dbs = Application.CurrentProject
 ' Search for open AccessObject objects in AllModules collection.
 For Each obj In dbs.AllModules
 If obj.IsLoaded = True Then
 ' Print name of obj.
 Debug.Print obj.Name, obj.CurrentView
 ' CurrentView = 0 as acCurViewDesign
 End If
 Next obj
End Sub


Чтобы определить тип модуля - Module или Class Module, необходимо открыть этот модуль и проверить свойство Type.

 

Категория: Мои статьи | Добавил: sonni-dim (04.10.2018)
Просмотров: 168 | Теги: запросы, таблицы, MS Access, отчёты, формы | Рейтинг: 0.0/0
Всего комментариев: 0
avatar