Я прошу прощения, если это слишком расплывчатый вопрос, но у нас возникла следующая проблема: мы используем форму поиска, чтобы найти запись, а затем загружаем ее в форму с ограниченным контролем, где вносятся изменения. Затем мы возвращаемся в форму поиска и открываем еще одну запись. Когда мы делаем это, свойство BeforeUpdate формы вызывает ошибку 3020, «Обновление без добавления нового или редактирования» и пошаговое выполнение кода, который ссылается на первую открытую запись. Это странно, потому что нет явного вызова обновления, но после долгих проб и ошибок я думаю, что ошибка такова:
Запись # 1 открывается через форму и вносятся изменения. Запись №2 открывается в той же форме без закрытия первого набора записей. Несмотря на то, что мы теперь заново открыли форму со второй записью, Access по-прежнему предполагает, что мы редактируем запись 1, т.е. что мы пытаемся редактировать 2 записи одновременно. То же самое, как если бы у нас была форма таблицы данных, и мы отредактировали одну строку, а затем попытались отредактировать вторую строку без сохранения первой. Я хочу иметь возможность автоматически обновлять первую запись, когда форма деактивируется, поэтому загрузка новой записи не вызывает этот конфликт.
Итак, суть такова: ** Есть ли способ, скажем, в событии Dirty или Deactivate формы, что мы можем принудительно обновить и закрыть набор записей формы ** перед загрузкой второй записи?
Надеюсь, я сделал это достаточно ясно, это сложно проблема, поэтому любое небольшое руководство поможет. Кстати, вы можете спросить: «Почему вы используете один и тот же код, чтобы открыть одну и ту же форму дважды?» Хороший вопрос! Эй, это старое и плохо написанное приложение (в нем есть GoSubs ради Пита), но у меня нет выбора, кроме как выбрать лучшее из плохой ситуации.
РЕДАКТИРОВАТЬ: меня попросили опубликовать код, который разумно, но это в нескольких разных местах. Итак, у меня есть форма данных, она имеет кнопку «Поиск», чтобы go вернуться к форме поиска для открытия другой записи. Кнопка поиска в форме ввода данных:
Private Sub CommandSearch_Click()
On Error GoTo Err_CommandSearch_Click
DoCmd.OpenForm "Reference Form", acNormal 'This is the form that does the searching
Exit_CommandSearch_Click:
Exit Sub
Err_CommandSearch_Click:
MsgBox Err.Description
Resume Exit_CommandSearch_Click
End Sub
Когда в этой форме поиска выбрана запись, открывается новая форма с этим кодом. Теперь это где это становится сложным. Я не оригинальный программист, как я сказал, я думаю, что он был написан в Access 97 кем-то после того, как он потратил час на чтение «Access for Dummies» :). Но всегда выглядит так, будто открыта только одна копия формы, так что, может быть, она открывает ее снова?
Public Sub CommandLoadCase_Click()
Dim LoadUTUCaseNumber As String, lengthUTUCaseNumber As Integer
lengthUTUCaseNumber = InStr(Forms![Reference Form]![Reference Query SubForm]![UTU Case Number], "-") - 1
If (lengthUTUCaseNumber = 0) Then
LoadUTUCaseNumber = ""
Else
LoadUTUCaseNumber = Left$(Forms![Reference Form]![Reference Query SubForm]![UTU Case Number], lengthUTUCaseNumber)
End If
On Error Resume Next
Forms![Case Appeal_Add-On Form].UTUCaseKeyToFind = LoadUTUCaseNumber
DoCmd.OpenForm "Case Appeal_Add-On Form", acNormal, , , , , LoadUTUCaseNumber
'Case Appeal Add On Form referred to here is the data entry form I refer to above.
End Sub
Наконец, после выполнения этой строки возникает ошибка 3020 (обновление без добавления / редактирования). в форме ввода данных. (Я знаю, что код сложный, поэтому сначала я его не вводил).
Private Sub Form_BeforeUpdate(Cancel As Integer)
[UTU Claim Sequence Key] = [UTU Claim Alpha Sequence] & CStr([UTU Claim Numeric Sequence])
End Sub