Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Access
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.11.2011, 22:58   #1
raytek
Пользователь
 
Регистрация: 07.11.2011
Сообщений: 67
По умолчанию Изменяемая подчиненая форма

Что нужно написать в свойстве подчиненая форма "объект-источник", чтобы при изменении данных в поле основной формы "пол" М или Ж подставлялась соответствующая им подчиненная форма М или Ж. Поле ФИО1 служит для поиска записей в форме
Foto.jpg
Заранее спасибо!
raytek вне форума Ответить с цитированием
Старый 08.11.2011, 06:36   #2
Woodlin
Форумчанин
 
Регистрация: 30.03.2010
Сообщений: 153
По умолчанию

При изменении данных в поле основной формы "пол" М или Ж программно меняйте объект-источник контрола подчиненная форма.
Me!КонтролПодчиненнаяФорма.SourceOb ject = "М"
или
Me!КонтролПодчиненнаяФорма.SourceOb ject = "Ж"
где М и Ж имена форм.
Woodlin вне форума Ответить с цитированием
Старый 09.11.2011, 00:04   #3
raytek
Пользователь
 
Регистрация: 07.11.2011
Сообщений: 67
По умолчанию

Извените, я не прграммист и ничего не понял, какую сделать запись в поле "объект-источник"? Нужно чтобы при поиске в основной "форма1" менялась подчиненная форма в зависимости от записи в поле "пол". Форма1 сделана на основе таблица1, ПодчиненаяФорма_Ж на основе таблица2, ПодчиненаяФорма_М на основе таблица3, Таблица1 связана отношением "1 ко многим" и с таблица2 и таблица3
raytek вне форума Ответить с цитированием
Старый 09.11.2011, 20:30   #4
Woodlin
Форумчанин
 
Регистрация: 30.03.2010
Сообщений: 153
По умолчанию

raytek, если форма1 у Вас служит для ввода новых данных, то на событие после обновления поля Пол можно написать так:
Код:
IF Me!Пол = "м" THEN
    Me!КонтролПодчиненнаяФорма.SourceObject = "ПодчиненнаяФорма_М"
ELSE
    Me!КонтролПодчиненнаяФорма.SourceObject = "ПодчиненнаяФорма_Ж"
END IF
Если ещё и для просмотра данных, то думаю этот код стоит вставить и в событие формы Текущая запись.


P.S. А может Вам попробовать элемент управления Вкладки?
Woodlin вне форума Ответить с цитированием
Старый 09.11.2011, 22:10   #5
raytek
Пользователь
 
Регистрация: 07.11.2011
Сообщений: 67
По умолчанию

Спасибо, попробую. Я привел простой пример, а задача у меня гораздо сложней, в форме1 уже куча вкладок и форма предназначена для просмотра энергетического оборудования с совершенно разными свойствами, не совместимыми в одной таблице....
Подождите, а что написать в поле "объект-источник" подчиненной формы?

Последний раз редактировалось raytek; 09.11.2011 в 22:22.
raytek вне форума Ответить с цитированием
Старый 10.11.2011, 00:41   #6
dMike
 
Регистрация: 09.11.2011
Сообщений: 5
По умолчанию

Цитата:
Сообщение от raytek Посмотреть сообщение
Подождите, а что написать в поле "объект-источник" подчиненной формы?
В этом поле подчиненной формы уже прописан объект-источник, - таблица, с которой связана данная форма. Не путайте контрол основной формы, в который вложена субформа, с самой этой субформой. У контрола "объект-источник" - субформа, а у субформы - таблица. Однако все равно, не уверен, что у вас что-н получится, так как, насколько я понимаю (тоже не программер), аксесс в принципе не умеет в рантайме удалять и добавлять контролы в форму. Здесь правда не совсем контролы, а их содержание ..., не пробовал ... В общем, имейте ввиду ...
dMike вне форума Ответить с цитированием
Старый 10.11.2011, 07:15   #7
Woodlin
Форумчанин
 
Регистрация: 30.03.2010
Сообщений: 153
По умолчанию

Цитата:
Сообщение от raytek Посмотреть сообщение
....Подождите, а что написать в поле "объект-источник" подчиненной формы?
Если форма для просмотра, то можно ничего не писать, просто на событие формы форма1 "Текущая запись" подвесьте приведённый выше код. При переходе по записям будет определяться значение поля Пол и в контрол субформа будет подставляться нужная форма.

Последний раз редактировалось Woodlin; 10.11.2011 в 07:20.
Woodlin вне форума Ответить с цитированием
Старый 11.11.2011, 18:52   #8
raytek
Пользователь
 
Регистрация: 07.11.2011
Сообщений: 67
По умолчанию

Все получилось! Ваш код вставил только в Форма1 Текущая запись, строку объект-источник оставил пустой, но есть еще одна проблема. В реальном проекте болше двух подчиненых форм и я попробовал подкоректировать ваш код пока для 3х:

Это рабочий код для 2х подформ:
Код:
Private Sub Form_Current()
IF Me!Пол = "М" THEN
Me!ПодчиненнаяФорма.SourceObject = "ПодчиненнаяФорма_М"
ELSE
Me!ПодчиненнаяФорма.SourceObject = "ПодчиненнаяФорма_Ж"
END IF
End Sub


Это подкоректированный для 3х подформ:
Private Sub Form_Current()
If Me!Пол = "М" Then
Me!ПодчиненнаяФорма.SourceObject = "ПодчиненнаяФорма_М"
If Me!Пол = "Д" Then
Me!ПодчиненнаяФорма.SourceObject = "ПодчиненнаяФорма_Д"
Else
Me!ПодчиненнаяФорма.SourceObject = "ПодчиненнаяФорма_Ж"
End If
End Sub


но Access ругается:
Compile error:
Block If without And If

помогите исправить ошибку, нужен код для любого числа подформ
Заранее спасибо!
raytek вне форума Ответить с цитированием
Старый 11.11.2011, 19:03   #9
shanemac51
Участник клуба
 
Аватар для shanemac51
 
Регистрация: 12.08.2010
Сообщений: 1,079
По умолчанию подформы

Код:
Private Sub Form_Current()
If Me!Пол = "М" Then
Me!ПодчиненнаяФорма.SourceObject = "ПодчиненнаяФорма_М"
elseIf Me!Пол = "Д" Then
Me!ПодчиненнаяФорма.SourceObject = "ПодчиненнаяФорма_Д"
Else
Me!ПодчиненнаяФорма.SourceObject = "ПодчиненнаяФорма_Ж"
End If
End Sub
Имя-Галина== почта shanemac51@yandex.ru скайп shanemac51 c 8-15мск будни
Сфера интересов--word-excel-access-распознавание
shanemac51 вне форума Ответить с цитированием
Старый 12.11.2011, 18:33   #10
Woodlin
Форумчанин
 
Регистрация: 30.03.2010
Сообщений: 153
По умолчанию

raytek, попробуйте Select Case. Я сам его использовал для числовых значений, но судя по справке для строковых тоже должно подойти.
Пример взят со справочного сайта:
Код:
Private Sub Form_BeforeUpdate(Cancel As Integer)
 Select Case Me![Country]
 Case "France"
    If Len(Me![PostalCode]) <> 5 Then
       MsgBox "PostalCode must be 5 characters."
       Cancel = True
    End If
 Case "Japan"
    If Len(Me![PostalCode]) <> 3 Then
       MsgBox "PostalCode must be 3 characters."
       Cancel = True
    End If
 End Select
End Sub
Woodlin вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ПЕрвая форма, кликая по кнопке, другая форма Nadej C++ Builder 0 02.10.2011 17:58
Форма tgm Microsoft Office Excel 6 21.01.2011 10:39
форма Милана666 Общие вопросы Delphi 2 03.06.2010 20:34
Изменяемая таблица Helennna Microsoft Office Excel 1 05.01.2010 01:26
Изменяемая дата в формуле Алексей_Баженов Microsoft Office Excel 5 03.04.2008 11:10