Rambler's Top100
Российский фонд помощи
Навигация
Главная
MS ACCESS
VB
ASP
PHP
Наши друзья
Поиск
Форум
Лента новостей
Новый сайт

Online
Рассылки Subscribe.Ru
Работа с MS Access
Подписаться письмом
Реклама на сайте
 
Главная arrow MS ACCESS arrow Найти в базе таблицы, имеющие поля подстановок
Найти в базе таблицы, имеющие поля подстановок Печать E-mail
Автор Eugene_LS   
23.11.2020 г.
Что пишет Microsoft о полях подстановок?

Поле подстановки — это поле таблицы, значение которого получено из другой таблицы или запроса.
Поле подстановки предназначено для замены отображаемого числа, например ИД, более понятным значением, таким как имя.
Создание поля подстановки не только делает данные более понятными, но и позволяет избежать ошибок данных, ограничивая значения, которые можно вводить.

Всё это красиво, но более опытные пользователи предпочитают не использовать поля подстановок.
Для этого есть несколько причин.
При переходе на другие версии Access поля подстановок иногда обрабатываются не корректно. (Были случаи)
При создании запросов на выборки, надо учитывать, что в полях находятся совсем другие значения, а не то, что видно при просмотре таблиц.
При правильной разработке пользователи не должны получать прямой доступ к таблицам, а работать только через формы. А в форме все эти подстановки легко реализуются при помощи запросов.
При переносе базы на другую систему (MS SQL Server, Firebird и т.д.) возникают проблемы с конвертацией таких таблиц.
При сопровождении готовой программы, чтобы изменить список подстановки или условия выбора, надо лезть в таблицы. А пользователи очень неохотно дают доступ к своим таблицам с данными. Сопровождать программы проще, если все изменения можно делать только в клиентской части.
По-этому многие, получив для доработки и сопровождения программы с полями подстановок, стараются их убрать.
Чтобы найти в программе таблицы с полями подстановок, можно воспользоваться кодом (автор:  Eugene-LS (Евгений Серебряков))
Public Sub PrintAll_LookupFields_in_Tables(Optional bolFixProperty As Boolean = False) 
' es 05.08.2019 - LE 19.07.2020 v003
' Проверка всех таблиц на наличие постановочных полей с возможностью исправления этого свойства

' Информация выводится в Immediate Window (Ctrl + G):

' Список всех полей со свойством подстановки (Название Таблицы - Название поля)

'--------------------------------------------------------------------------

'Аргумент: bolFixProperty = Признак исправления свойства сразу после обнаружения

' bolFixProperty по умолчанию = False
'--------------------------------------------------------------------------
'Проверка на:
' objField.Properties("DisplayControl").Value = 111(ComboBox) или 110(ListBox)
' а если :
' objField.Properties("DisplayControl").Value = 109(TextBox) = OK!
'--------------------------------------------------------------------------

'Заапуск с исправлением: PrintAll_LookupFields_in_Tables True

'--------------------------------------------------------------------------

Dim
tdf As DAO.TableDef Dim objField As DAO.Field
Dim bolHasPrp As Boolean
Dim objPrp As Property
Dim s$, sTName$, sFLDName$, sPrpName$, iTbls%, iErr% Const iLineLength% = 72
'Линия над результатами:
Debug.Print String(iLineLength, "-")

For Each tdf In CurrentDb.TableDefs
'Перебор всех таблиц кроме системных
If (tdf.Attributes And dbSystemObject) = False Then
' кроме системных
sTName = tdf.Name
iTbls = iTbls + 1
'Учёт
For Each objField In tdf.Fields
'Перебор всех полей таблицы
sFLDName = objField.Name
'Наличие свойства "DisplayControl"
bolHasPrp = CheckPropertyPresent(objField, "DisplayControl")
If bolHasPrp = True Then
Set objPrp = objField.Properties("DisplayControl")
If objPrp.Value = 111 Or objPrp.Value = 110 Then
iErr = iErr + 1
'Учёт ошибок
If bolFixProperty = True Then
'Если заказано - испраляем:
objPrp.Value = 109
'109 = TextBox
s = vbTab & "Табл: [" & sTName & "]" & _
" - Поле: [" & sFLDName & "] " & _
"Свойство: [DisplayControl] " & _
" - исправлено на 109(TextBox)."
Else
'Показываем только отчёт:
s = "Табл: [" & sTName & "]" & _
" - Поле с подстановкой : " & sFLDName
Debug.Print s
End If
End If
End If
Next objField
End If
Next tdf

If iErr > 0 Then
'Найдены ...
Debug.Print String(iLineLength, "-")
'Линия под результатами
If bolFixProperty = False Then
s = "Обработано: " & iTbls & " таблиц" & _
" - Найдено полей с подстановкой : " & iErr
Else
s = "Обработано: " & iTbls & " таблиц" & _
" - Исправлено (удалено) полей с подстановкой : " & iErr
End If
Else
'Ничего не найдено - УРА!
s = "Обработано: " & iTbls & " таблиц и полей с подстановкой не найдено!"
End If
Debug.Print s
Debug.Print String(iLineLength, "=")
'Линия под отчётом

End Sub


Private Function CheckPropertyPresent(obj As Object, sPrpName$) As Boolean
'es - 19.07.2020 'Впомогательная функция - проверяет наличие заданного в аргументе свойства
' у обьекта переданного в аргументе obj
' ------------------------------------------------------
Dim vVal
On Error GoTo CheckPropertyPresent_Err
vVal = obj.Properties(sPrpName)
CheckPropertyPresent = True

CheckPropertyPresent_End:
Exit Function

CheckPropertyPresent_Err:
'Debug.Print "CheckPropertyPresent_Line: " & Erl & "."
Err.Clear
Resume CheckPropertyPresent_End
End Function


Просмотров: 146

  Ваш коментарий будет первым

Добавить коментарий
Имя:
E-mail
Коментарий:



Код:* Code

 
Реклама на сайте
HiProg.com - Технологии программирования
Rambler's Top100 TopList