IMHO.WS

IMHO.WS (https://www.imho.ws/index.php)
-   Программирование (https://www.imho.ws/forumdisplay.php?f=40)
-   -   Как заставить Access обновить поле?!! (https://www.imho.ws/showthread.php?t=60953)

Dragon31337 06.06.2004 01:13

Как заставить Access обновить поле?!!
 
У меня на форме ПолеСоСписком у него источник строк - таблица.
Стоит свойство ограничится списком = истина.
На событие, которое возникает, когда не в списке я спрашиваю и добавляю элемент в таблицу.
Но как мне заставить обновится это поле со списком, чтобы он заново считал эти поля?

Dragon31337 06.06.2004 12:33

Access'ом никто не занимается? Плз, хелп!

Drakosha 06.06.2004 13:06

<fieldname>.requery()

Dragon31337 06.06.2004 15:23

Я так и написал, но когда пускаю, то получаю окно
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

Drakosha 06.06.2004 20:57

не помню, давно access не занимался. Ты хочешь добавить в таблицу новое значение когда в комбо юзер ввел новое значение? Помню что надо писать код и _NotInList и в _afterupdate. там есть какие-то игры с undo, requery вроде надо писать в _afterupdate

Dragon31337 07.06.2004 10:07

Всем спасибо, проблему решил сам. Для последующих поколений публикую решение проблемы.
Нужно в процедуре, после добавления элемента в таблицу глобалной переменной 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


Часовой пояс GMT +4, время: 17:00.

Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.