Обновление записи в форме как в mdb.
Автор ДиД   
27.03.2002 г.
Кто работал с ADP знают, что при работе с формой на основе 2 связанных таблиц (1-ко-многим) при внесении или обновлении данных в форме, пока строка не обновиться, данные из таблицы на стороне 1 не появляются или не обновляются. Решение здесь ...

Иммитация поведения 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

Обратите внимание, что название поле в форме [Регион:] не должно совпадать с источником самого поля [Регион].



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

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

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



Код:* Code