| imho.ws |
![]() |
|
|
|
# 1 |
|
Advanced Member
Регистрация: 21.11.2003
Адрес: Столица
Сообщения: 490
![]() ![]() ![]() ![]() ![]() ![]() |
Как заставить Access обновить поле?!!
У меня на форме ПолеСоСписком у него источник строк - таблица.
Стоит свойство ограничится списком = истина. На событие, которое возникает, когда не в списке я спрашиваю и добавляю элемент в таблицу. Но как мне заставить обновится это поле со списком, чтобы он заново считал эти поля? |
|
|
|
|
# 4 |
|
Advanced Member
Регистрация: 21.11.2003
Адрес: Столица
Сообщения: 490
![]() ![]() ![]() ![]() ![]() ![]() |
Я так и написал, но когда пускаю, то получаю окно
Run-time error '2118': Необходимо сохранить текущее поле перед выполнением макрокоманды обновление. Вот текст процедуры: Private Sub ФакулИлиПредпр_NotInList(NewData As String, Response As Integer) Dim SQL$ Response = MsgBox("Такой кафедры нет в списке, добавить?", vbYesNo) If Response = vbYes Then DoCmd.SetWarnings False SQL = "INSERT INTO Кафедры (Название) Values('" & NewData & "')" DoCmd.RunSQL SQL Me.ФакулИлиПредпр.Requery Me.ФакулИлиПредпр.Text = NewData DoCmd.SetWarnings True End If End Sub |
|
|
|
|
# 5 |
|
Full Member
Регистрация: 16.10.2002
Адрес: ArchLinux, Internet
Сообщения: 557
![]() ![]() ![]() ![]() |
не помню, давно access не занимался. Ты хочешь добавить в таблицу новое значение когда в комбо юзер ввел новое значение? Помню что надо писать код и _NotInList и в _afterupdate. там есть какие-то игры с undo, requery вроде надо писать в _afterupdate
|
|
|
|
|
# 6 |
|
Advanced Member
Регистрация: 21.11.2003
Адрес: Столица
Сообщения: 490
![]() ![]() ![]() ![]() ![]() ![]() |
Всем спасибо, проблему решил сам. Для последующих поколений публикую решение проблемы.
Нужно в процедуре, после добавления элемента в таблицу глобалной переменной Response присвоить значение acDataErrAdded. А если юзверь отказался от внесения данных, то acDataErrContinue. В хелпе, к сожалению вообще на эту тему ничего не написано. Вот универсальная процедура, может кому надо. ______________________________________________________________ Public Function AppendLookupTable(cbo As ComboBox, NewData As Variant, Optional blnMsg As Boolean = True) As Integer Dim rst As DAO.Recordset Dim Response As Long On Error GoTo m1 AppendLookupTable = acDataErrContinue If Not (IsNull(NewData)) Then If blnMsg Then Response = MsgBox("Значение '" & NewData & "' отсутствует в списке." & vbCrLf & "Для добавления нажмите ОК.", vbOKCancel + vbQuestion, "Добавление значения") Else Response = 1 End If Select Case Response Case 1 Set rst = CurrentDb.OpenRecordset(cbo.RowSource) rst.AddNew rst(1) = NewData rst.Update rst.Close AppendLookupTable = acDataErrAdded Case 2 Exit Function End Select End If m2: Set rst = Nothing Exit Function m1: MsgBox "Ошибка " & Err.Number & ": " & Err.Description & " в функции AppendLookupTable", vbInformation Resume m2 End Function |
|
|