|
|||||||
Подчинённые поля со списком (ComboBox-ами) в ленточной (табличной) форме (+ Пример)
Время создания: 16.03.2019 23:43
Раздел: Разные закладки - VBA - Access - msa.polarcom.ru - 06 Формы Подчиненные
Запись: xintrea/mytetra_db_adgaver_new/master/base/15319726868n4myhspbr/text.html на raw.githubusercontent.com
|
|||||||
|
|||||||
Подчинённые поля со списком (ComboBox-ами) в ленточной (табличной) форме (+ Пример) Основная идея примера: Работа со подчинёнными полями со списком (ComboBox-ами) в ленточной форме (обрабатывается 2 уровня подчинённости). Private Type Old_ID_Values 'Описание типа ID01 As Long 'Для поля [Орг_IDN] = старый ID Организации ID02 As Long 'Для поля [Отд_IDN]] = старый ID Отдела ID03 As Long 'Запасной ... End Type Private OldVal As Old_ID_Values Private Sub Form_Current() 'При переходе на запись - запоминаем сарые значения ключевых полей ' Для надёжного определения изменения значений ComboBox-ов '-------------------------------------------------------------------------- OldVal.ID01 = Nz(Me!Орг_IDN) 'Для поля [Орг_IDN] = ID Организации OldVal.ID02 = Nz(Me!Отд_IDN) 'Для поля [Отд_IDN] = ID Отдела 'Изменения должности тут отслеживать не нужно т.к. поле не имеет подчинённых ComboBox-ов 'OldVal.ID03 = Nz(Me!Долж_IDN) 'Для поля [Долж_IDN] = ID Должности End Sub
Private Sub Form_Open(Cancel As Integer) 'Cобытие: Открытие формы '-------------------------------------------------------------------------- Dim s As String 'Заполнение-обновление временной таблицы для отображения данных из "Сотрудники" RefreshTempData_Сотрудники ' Смотри в модуль modFormsTempDataUPD '-------------------------------------------------------------------------- ' Задаём RowSource и некоторые основные свойства ComboBox-Ов для контроля и наглядности ' (не обязательно, уже заданны в конртролах) '-------------------------------------------------------------------------- ' 01 cbОрганизацияНазвание s = "SELECT ОргНазвание, Организация_ID FROM Организации ORDER BY ОргНазвание;" Me!cbОрганизацияНазвание.RowSource = s 'Свойство "Источник строк" Me!cbОрганизацияНазвание.ControlSource = "tempVal01" 'Свойство "Данные (ControlSource)" - Временное поле 01 Me!cbОрганизацияНазвание.ColumnCount = 2 'Кол-во столбцов Me!cbОрганизацияНазвание.BoundColumn = 1 'Свойство "Присоединенный столбец (BoundColumn)" Me!cbОрганизацияНазвание.ColumnWidths = "4536;0" 'Ширина столбцов = 8cm;0cm 'Debug.Print Me!cbОрганизацияНазвание.ColumnWidths 'Смотрим установленные значения из контрола ' 02 cbОтделНазвание s = "SELECT ОтдНазвание, Отдел_ID FROM Отделы WHERE (Организация_IDN=[Forms]![Штатное_Расписание_Простая]![Орг_IDN]) ORDER BY ОтдНазвание;" Me!cbОтделНазвание.RowSource = s Me!cbОтделНазвание.ControlSource = "tempVal02" 'Временное поле 02 Me!cbОтделНазвание.ColumnCount = 2 Me!cbОтделНазвание.BoundColumn = 1 Me!cbОтделНазвание.ColumnWidths = "4536;0"
'03 cbДолжностьНазвание s = "SELECT ДлжНазвание, Должность_ID FROM Должности WHERE (Отдел_IDN=[Forms]![Штатное_Расписание_Простая]![Отд_IDN]) ORDER BY ДлжНазвание;" Me!cbДолжностьНазвание.RowSource = s Me!cbДолжностьНазвание.ControlSource = "tempVal03" 'Временное поле 03 Me!cbДолжностьНазвание.ColumnCount = 2 Me!cbДолжностьНазвание.BoundColumn = 1 Me!cbДолжностьНазвание.ColumnWidths = "4536;0" End Sub
Private Sub cbОтделНазвание_GotFocus() 'Получение фокуса подчинённым ComboBox-ом: Me!cbОтделНазвание.Requery 'Надо освежить источник строк (по полю [Орг_IDN] тек. записи) End Sub Private Sub cbДолжностьНазвание_GotFocus() 'Получение фокуса подчинённым ComboBox-ом: Me!cbДолжностьНазвание.Requery 'Надо освежить источник строк (по полю [Орг_IDN] тек. записи) End Sub
Private Sub cbОрганизацияНазвание_BeforeUpdate(Cancel As Integer) 'Событие: До Обновления '-------------------------------------------------------------------- ' Проверка выбрано ли заначение в ComboBox через ListIndex If Me!cbОрганизацияНазвание.ListIndex = -1 Then 'Значение Организации НЕ ВЫБРАНО! Me!Орг_IDN = 0 Else 'Значение ВЫБРАНО 'Сохраняем ID Организации в поле "Орг_IDN" (таблицы "Сотрудники") Me!Орг_IDN = Me!cbОрганизацияНазвание.Column(1) 'Значение вророго столбца ID End If 'Значение выбрано и отличается от старого - Зачистка подчинённых полей If OldVal.ID01 <> Me!Орг_IDN Then Me!Отд_IDN = 0 Me!cbОтделНазвание = Null Me!Долж_IDN = 0 Me!cbДолжностьНазвание = Null OldVal.ID01 = Me!Орг_IDN 'Запоминаем End If End Sub Private Sub cbОтделНазвание_BeforeUpdate(Cancel As Integer) 'Событие: До Обновления '-------------------------------------------------------------------- 'Проверка выбрано ли значение ComboBox через ListIndex If Me!cbОтделНазвание.ListIndex = -1 Then 'Значение Отдела НЕ ВЫБРАНО Me!Отд_IDN = 0 Else 'Значение ВЫБРАНО 'Сохраняем ID Отдела в поле "Отд_IDN" (таблицы "Сотрудники") Me!Отд_IDN = Me!cbОтделНазвание.Column(1) 'Значение вророго столбца ID End If 'Значение выбрано и отличается от старого - Зачистка подчинённых полей If OldVal.ID02 <> Me!Отд_IDN Then Me!Долж_IDN = 0 Me!cbДолжностьНазвание = Null OldVal.ID02 = Me!Отд_IDN 'Запоминаем на будущие End If End Sub Private Sub cbДолжностьНазвание_AfterUpdate() 'Событие: После Обновления '-------------------------------------------------------------------- 'Проверка выбрано ли значение ComboBox через ListIndex If Me!cbДолжностьНазвание.ListIndex = -1 Then 'Значение Отдела НЕ ВЫБРАНО Me!Долж_IDN = 0 Else 'Значение ВЫБРАНО 'Сохраняем ID Должности в поле "Долж_IDN" (таблицы "Сотрудники") Me!Долж_IDN = Me!cbДолжностьНазвание.Column(1) 'Значение вророго столбца ID End If End Sub
MSA-2003 + MSA-2007 ( 363 kB) Пример |
|||||||
Прикрепленные файлы:
|
|||||||
Так же в этом разделе:
|
|||||||
|
|||||||
|