Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
Господа, будьте снисходительны, не бросайтесь сразу штрафовать за, как вам кажется, глупые вопросы - beginners на то и beginners.
| | | | |
есть еще пара ньюансов. 14.03.11 20:26 Число просмотров: 9537
Автор: Den <Денис Т.> Статус: The Elderman Отредактировано 14.03.11 20:29 Количество правок: 3
|
1. если bounded колонкой выпадающего списка является идентификатор значения, а не его описание, то и присваивать значению combobox (cmboxAction.Value) надо именно идентификатор добавленного значения.
2. посмотрел внимательнее своё решение... порядок обработки следующий::
Err.Clear
With Me.cmboxAction
.Undo
.Requery
.Value = NewActionID
End With
Response = acDataErrAdded
Response = acDataErrContinue ---
|
<beginners>
|
[MS Access, VBA] Как отключить предупреждение об отсутствии в списке? 12.03.11 14:57
Автор: Vedrus <Serokhvostov Anton> Статус: Member Отредактировано 12.03.11 14:57 Количество правок: 1
|
Ситуация следующая. У меня на форме стоит combobox, в который можно вводить только те значения, которые есть в его списке (список формируется из таблицы). Я добавил следующую фичу: если введено значение, которое отсутствует в списке, то выдаётся диалог с предложением добавить это значение в список. В случае согласия я выполняю запрос на добавление и делаю requery, т.о. добавляю «нелегальный» элемент.
Всё работает, но после того как элемент уже добавлен, выпадает сообщение: «Введенный текст не соответствует ни одному из элементов списка», хотя соответствующая запись уже присутствует. Когда я закрываю это сообщение и «ухожу с текущей записи», то жалоб больше не поступает. Как отключить это предупреждение?
|
|
При этом не перезапрашиваются данные для выпадающего... 13.03.11 04:29
Автор: Den <Денис Т.> Статус: The Elderman
|
> Ситуация следующая. У меня на форме стоит combobox, в > который можно вводить только те значения, которые есть в > его списке (список формируется из таблицы). Я добавил > следующую фичу: если введено значение, которое отсутствует > в списке, то выдаётся диалог с предложением добавить это > значение в список. В случае согласия я выполняю запрос на > добавление и делаю requery, т.о. добавляю «нелегальный» > элемент.
При этом не перезапрашиваются данные для выпадающего списка.
> Всё работает, но после того как элемент уже добавлен, > выпадает сообщение: «Введенный текст не соответствует ни > одному из элементов списка», хотя соответствующая запись > уже присутствует. Когда я закрываю это сообщение и «ухожу с > текущей записи», то жалоб больше не поступает. Как > отключить это предупреждение?
Попробуй переприсвоить свойство RowSource после выполнения запроса на добавление нового значения.
|
| |
Не понял, о чём вы? Я добавляю новое значение в таблицу, из... 14.03.11 05:14
Автор: Vedrus <Serokhvostov Anton> Статус: Member Отредактировано 14.03.11 05:15 Количество правок: 1
|
> При этом не перезапрашиваются данные для выпадающего > списка. Не понял, о чём вы? Я добавляю новое значение в таблицу, из которой выпадающий список берёт данные. После этого делаю requery выпадающему списку.
> Попробуй переприсвоить свойство RowSource после выполнения > запроса на добавление нового значения. Написал после requery «action.RowSource = action.RowSource» Но какой в этом смысл? Запрос-то у меня не меняется, он всегда один. После requery новое значение присутствует как в таблице, так и в списке, проблема именно только в этом окне.
Такое ощущение, что Access «принимает решение вывести это окно» ещё до того, как я проделал все свои вышеописанные махинации, и его уже не волнует, есть в списке такое значение или нет – он в любом случае выводит это окно.
Но значение в списке уже точно есть, п.ч. если ввести несуществующее значение и нажать <enter>, то выведется это сообщение. При повторных нажатиях оно также будет выводиться. А у меня оно выводится только в первый раз, а потом не выводится, потому что оно уже есть в списке.
На одном из форумов я нашёл обсуждение похожей темы, но там решение так и не было представлено. Там один человек предложил «обработать ошибку». Я попытался последовать этому совету, но так и не нашёл событие, в котором эта ошибка возникает. Я почти во всех событиях combobox’а поставил такие строки:
On Error GoTo Err_action_BeforeUpdate
Err_action_BeforeUpdate:
---
Но сообщение по-прежнему вылетает.
|
| | |
Посмотрел как я это делал в своих старых проектах. 14.03.11 10:57
Автор: Den <Денис Т.> Статус: The Elderman
|
Посмотрел как я это делал в своих старых проектах.
В самом начале обработчика события NotInList достаточно поставить Err.Clear
|
| | | |
не помогает ((( 14.03.11 15:05
Автор: Vedrus <Serokhvostov Anton> Статус: Member Отредактировано 14.03.11 15:22 Количество правок: 2
|
Поставил эту штуку абсолютно во все события выпадающего списка, но окно по прежнему вылетает. Такое ощущение, что обработчик этой ошибки находится вне пределов действия combobox'а. Я прогонял программу в пошаговой отладке. В начале и в конце события NotInList поставил err.clear. Даже когда отладчик доходит до последней строчки, этого окна ещё нет, но когда последний раз жмёшь F8 (когда курсор на end'е стоит), то вылетает это окно
|
| | | | |
есть еще пара ньюансов. 14.03.11 20:26
Автор: Den <Денис Т.> Статус: The Elderman Отредактировано 14.03.11 20:29 Количество правок: 3
|
1. если bounded колонкой выпадающего списка является идентификатор значения, а не его описание, то и присваивать значению combobox (cmboxAction.Value) надо именно идентификатор добавленного значения.
2. посмотрел внимательнее своё решение... порядок обработки следующий::
Err.Clear
With Me.cmboxAction
.Undo
.Requery
.Value = NewActionID
End With
Response = acDataErrAdded
Response = acDataErrContinue ---
|
| | | | | |
Спасибо! Заработало. Всё дело в последних двух строчках было. С ними даже без err.clear работает. 15.03.11 05:43
Автор: Vedrus <Serokhvostov Anton> Статус: Member Отредактировано 15.03.11 05:58 Количество правок: 1
|
И ещё один маленький вопрос... После всех этих манипуляций список открытым становится, можно ли его как-то закрыть, чтобы каждый раз <ESC> не жать? Я нашёл в combobox'е свойство Dropdown, но оно только на раскрытие работает, а присваивать ему логические значения, увы, нельзя.
|
| | | | | | |
переведи фокус на другой объект 15.03.11 11:33
Автор: Den <Денис Т.> Статус: The Elderman
|
|
|
|