Иммитация поведения mdb в adp при смена значения ключа таблицы на стороне один. Вы наверное обратили внимание, что при работе с формой на основе 2 связанных таблиц (1-ко-многим) при внесении или обновлении данных в форме, пока строка не обновиться, данные из таблицы на стороне 1 не появляются или не обновляются. Поясню на примере: Имеется таблица Контрагентов: КодКонтрагента | Контрагент | Регион | Имеется таблица Приход: Код | Дата | КодКонтрагента | Сумма | Обе таблицы связаны друг с другом полями Код (справочник Контрагентов) и полем КодКонтрагента из таблицы Приход соотношением один-(справочник Контрагентов)-ко-многим(таблица Приход) Все это сведено в форму в виде: Дата | Контрагент | Регион | Сумма | , т.е., при выборе другого Контрагента, поле Регион не обновится, как это было в mdb. Два примера, демонстрирующие решение проблемы, находятся по адресу: http://am.rusimport.ru/MsAccess/Samples/frm001.htm. Там же можно найти более подробное описание других способов решения этой проблемы с разбором положительных и отрицательных моментов каждого из них.
Здесь же изложу ocновные шаги, демонстрирующие решение проблемы
1. Необходимо, чтобы в форме было поле с уникальным ключом (например: Код) 2. В форме имеются поля [Код](таблица Приход: поле Код), [Дата] (таблица Приход: поле Дата), [Регион:] (таблица Контрагенты: поле Регион ), Сумма (таблица Приход), поле со списком - [Контрагент] (таблица Контрагенты: поле КодКонтрагента). 3. Поле со списком [Контрагент] имеет 3 столбца: один, скрытый, код, другие, видимые, Контрагент и Регион из таблицы Контрагентов. 4. В событии "после обновления" поля [Контрагент] пишем: Для А2000: If IsNull(Me("Код")) Then Me("Регион:").ControlSource = "=iif([Код] is null,iif([КодКонтрагента] is null,null,'" & Me("Контрагент").Column(2) & "'),[Регион])" Else Me("Регион:").ControlSource = "=iif([Код]=" & Me("Код") & ",'" & Me("Контрагент").Column(2) & "',[Регион])" End If Для А2002: Me("Регион:").ControlSource = "=iif([Код]=" & Me("Код") & ",'" & Me("Контрагент").Column(2) & "',[Регион])" 5. В событии формы "до обновления" пишем (для возврата все на свои места): Me("Регион:").ControlSource = "Регион" 6. В событии формы "клавиша вниз" пишем (это для того, чтобы вернуть все на место при нажатии клавиши Esc): If KeyCode = 27 Then Me("Регион:").ControlSource = "Регион" End If Обратите внимание, что название поле в форме [Регион:] не должно совпадать с источником самого поля [Регион]. |