Метод MS Access 2007 OpenForm, не может получить предложение where для получения правильного результата - PullRequest
0 голосов
/ 05 октября 2011

Не могу заставить метод OpenForm открыть форму с правильной загрузкой записи. Я собираюсь сделать все возможное, чтобы предоставить подробную информацию:

Форма 'source' основана на Таблице A и доступна только для чтения. Кнопка в исходной форме используется для открытия «целевой» формы, которая используется для редактирования записей, также из таблицы A.

Я попытался с помощью мастера создать кнопку, которая открывает форму на основе равенства первичных ключей. Результат работы мастера заключается в том, что независимо от того, какая запись находится в контексте исходной формы, целевая форма загружает только первую запись в таблице А.

Я пытался использовать процедуру со следующими вариантами:

Dim frm As String, whr As String
frm = "Target Form"
whr = "Forms![Source Form]!ID = Forms![Target Form]!ID"
'whr = "[ID] = [ID]"
'whr = "[ID] = Forms![Target Form]!ID"
DoCmd.OpenForm frm, acNormal, , whr, , , 1

Я мог бы получить только первую запись для загрузки в целевой форме или получить новую запись для загрузки в целевой форме. Но я не могу получить загруженную запись исходной формы для определения записи, загруженной в целевую форму.

Спасибо за любую помощь

1 Ответ

1 голос
/ 05 октября 2011

Я думаю, что ты близко.Вы хотите, чтобы WhereCondition было таким же, как предложение WHERE для запроса источника записей Целевой формы, но без слова WHERE.

Dim frm As String, whr As String
frm = "Target Form"
whr = "[ID] = " & Me.ID
Debug.Print "whr: " & whr
DoCmd.OpenForm frm, acNormal, , whr

Я намеревался Me.ID в качестве значения элемента управления, имя которого равноID и привязан к полю в текущей записи исходной формы.Я - сокращение от "этой формы".Одна из причин, по которой это полезно, заключается в том, что вам не нужно будет пересматривать код, если позже вы решите дать форме другое имя.

Я добавил оператор Debug.Print, чтобы вы могли переключиться в окно «Немедленное окно» (Ctrl).+ g) и скопируйте строку whr, затем вставьте ее в новый запрос, основанный на том же источнике записей, который использует целевая форма.Это может быть полезно в том случае, если вы по-прежнему не отображаете правильную запись при открытии целевой формы.

Ваша версия также содержит 1 в качестве OpenArgs для OpenForm.Я не видел, как ты это использовал, поэтому оставил это.Если целевая форма включает процедуру обработки событий, которая что-то делает с OpenArgs, убедитесь, что она не переопределяет ваше условие WhereCondition.

...