|
2001 Предыдущая операция прервана пользователем
|
|||
---|---|---|---|
#18+
Access 2003 Есть главная и табличная подчинённая формы. При старте в подчинённую форму по умолчанию загружаются данные по запросу qryLasWorkParam . Для ввода новой записи по нажатию кнопки на панели отрабатывается функция MnuNewEntry() из модуля главной формы. Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
В подчинённой форме появляется одна пустая строка для ввода новой записи. После заполнения последнего поля и нажатия Enter отрабатывается процедура из модуля подчинённой формы Form_AfterUpdate() . Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17.
и подчинённая форма опять переходит в режим демонстрации последних введённых параметров. Показывает в таблице с прочими и ту запись, что только что была введена. Всё окей. Дабы пользователь мог отказаться от ввода новых данных ему нужно нажать на клавиатуре клавишу Esc, после чего отрабатывается процедура из модуля подчинённой формы Form_KeyPress(KeyAscii As Integer) , которая принудительно вызывает процедуру Form_AfterUpdate() из модуля подчинённой формы. Код: vbnet 1. 2. 3.
И вот тут на строке Код: vbnet 1.
в процедуре Form_AfterUpdate() вылезает ошибка 2001 Предыдущая операция прервана пользователем . Смены Рекордсета не происходит и подчинённая форма остаётся в режиме ввода новой записи. Закрываю главную форму и загружаю её по новому. Подскажите плз что за предыдущая операция не завершена и как её завершить. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.12.2016, 00:10 |
|
2001 Предыдущая операция прервана пользователем
|
|||
---|---|---|---|
#18+
Эмоции, могу предположить, что размещение запуска процедуры Form_AfterUpdate из процедуры Form_KeyPress на событие нажатие клавиши Esc , мягко говоря, некорректное. При вводе новой записи она помещается в буфер и ея статус не определён. Access ожидает от пользователя решения что дальше делать с этой записью - поместить в источник или сбросить. — Вот так всегда: ходишь, ходишь в школу, а потом — бац! — и вторая смена. © к/ф "Большая перемена" И тут ты меняешь источник записей ( RecordSource )... Попробуй Код: vbnet 1. 2. 3.
Всё на правах "ИМХО" ЗЫ. И как-нибудь кэшируй объекты. Тебе самому не лень набирать такие портянки? Да и в каждой строке лазить по всем коллекциям... Анекдот на эту темуСудья распрашивает мужика, совершившего убийство женщины в трамвае: - За что вы убили женщину? - Еду я, значит, в трамвае. Заходит женщина и подходит к компостеру. Открывает сумку, достаёт кошёлку, закрывает сумку, открывает кошёлку, достаёт кошелёк, закрывает кошёлку, открывает сумку, убирает кошёлку, закрывает сумку, открывает кошелёк, достаёт билетик, закрывает кошелёк, открывает сумку, достаёт кошёлку, закрывает сумку, открывает кошёлку, убирает кошелёк, закрывает кошёлку, открывает сумку, убирает кошёлку, закрывает сумку, пробивает билетик, открывает сумку, достаёт кошёлку, закрывает сумку, открывает кошёлку, достаёт кошелёк, закрывает кошёлку, открывает сумку, убирает кошёлку, закрывает сумку, открывает кошелёк, убирает билетик, закрывает кошелёк, открывает сумку, достаёт кошёлку, закрывает сумку, открывает кошёлку, убирает кошелёк, закрывает кошёлку, открывает сумку, убирает кошёлку, закрывает сумку. Тут заходит контролёр... - Стойте! Я за такое тоже бы убил... ... |
|||
:
Нравится:
Не нравится:
|
|||
01.12.2016, 04:23 |
|
2001 Предыдущая операция прервана пользователем
|
|||
---|---|---|---|
#18+
Эмоции, да, можно просто правильно обрабатывать ошибки . У тебя на любую ошибку следует выход из процедуры (мы сейчас говорим про Form_AfterUpdate ), а можно попробовать на эту ошибку вернуться и повторного выполнить установку нового источника данных ( RecordSource ). Всего лишь нужно модифицировать обработчик ошибок так Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16.
Кроме всего прочего, оператор Resume производит очистку ошибок. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.12.2016, 04:49 |
|
2001 Предыдущая операция прервана пользователем
|
|||
---|---|---|---|
#18+
Панург Код: vbnet 1. 2. 3.
Да процедура Form_KeyPress(KeyAscii As Integer) из модуля подчинённой формы. Me.Undo ничего не решил. Обработчик ошибок писал в процедуре, чтобы ошибка проявилась при запущенном на исполнение файле, т.к. по нажатию Esc смена рекордсурса не происходила и ошибка не проявлялась. В общем вопрос корректного завершения предыдущей операции остался. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.12.2016, 10:46 |
|
2001 Предыдущая операция прервана пользователем
|
|||
---|---|---|---|
#18+
Эмоции, выкладывай проблемную часть БД, будем посмотреть, а то так можно долго гадать... ... |
|||
:
Нравится:
Не нравится:
|
|||
01.12.2016, 11:42 |
|
2001 Предыдущая операция прервана пользователем
|
|||
---|---|---|---|
#18+
ЭмоцииОбработчик ошибок писал в процедуре, чтобы ошибка проявилась при запущенном на исполнение файле, т.к. по нажатию Esc смена рекордсурса не происходила и ошибка не проявлялась.А обработка ошибки что дала? На второй круг вернулось? И?... ... |
|||
:
Нравится:
Не нравится:
|
|||
01.12.2016, 11:45 |
|
2001 Предыдущая операция прервана пользователем
|
|||
---|---|---|---|
#18+
Панург, Да, на второй круг вернулось. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.12.2016, 16:19 |
|
2001 Предыдущая операция прервана пользователем
|
|||
---|---|---|---|
#18+
Эмоциии подчинённая форма опять переходит в режим демонстрации последних введённых параметров. Показывает в таблице с прочими и ту запись, что только что была введена. Всё окей. Дабы пользователь мог отказаться от ввода новых данных ему нужно нажать на клавиатуре клавишу Esc, вот тут имхо и есть все непонятки... если новая запись уже появилась рядом со старыми и фокус её в месте рождения уже не в тренде, то никаких уже отказов и Esc кеев не должно быть, для этого уже по идее должна использоваться совсем другая кнопка "Удалить запись". А так получается хотим не пустить зайца из клетки, который из неё уже убежал... ... |
|||
:
Нравится:
Не нравится:
|
|||
01.12.2016, 18:32 |
|
2001 Предыдущая операция прервана пользователем
|
|||
---|---|---|---|
#18+
vmag, ты разорвал два абзаца. В первом рассказываются действия когда запись сохраняется, во втором - отказ от сохранения . ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2016, 04:13 |
|
2001 Предыдущая операция прервана пользователем
|
|||
---|---|---|---|
#18+
Эмоции, я так и не понял, ну вернулось на второй круг (продолжило выполнятся) и?... Опять ошибка или код исполняется? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2016, 04:15 |
|
2001 Предыдущая операция прервана пользователем
|
|||
---|---|---|---|
#18+
База слишком большая, разделённая и 'секретная ' :) вечер промудохался, чтобы сделать упрощённый аналог но застрял на ошибке при изменении рекордсурса. ....Опять ошибка, можно нажимать ESC вечно, ходим по кругу Второй круг, т. е. подчинённая форма остаётся с подгруженным рекордсурсом Код: vbnet 1.
в режиме ожидания на ввод новых данных, а должно по идее вернуться к рекордсурсу загружаемому в форму по умолчанию. Т. е со второго, третьего... любого круга можно ввести новые данные и вернуть подчинённую форму в режим просмотра последних введенных данных, а вот по отказу ESC топчемся на месте. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2016, 10:39 |
|
2001 Предыдущая операция прервана пользователем
|
|||
---|---|---|---|
#18+
ЭмоцииБаза слишком большая, разделённая и 'секретная 'Секретная видимо всё ж не база (если она не ракетная), а данные - забиваешь бессмыслицу и уже несекретная. Копировать просто. Создай новый файл и туда скопируй проблемный кусок. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2016, 11:40 |
|
2001 Предыдущая операция прервана пользователем
|
|||
---|---|---|---|
#18+
Панургvmag, ты разорвал два абзаца. В первом рассказываются действия когда запись сохраняется, во втором - отказ от сохранения . так я и хотел показать, что второй абзац после первого уже не имеет смысла... у ТС после ввода новая запись уже фигурирует в одном списке вместе со старыми, значит она уже сформирована... процедура Form_AfterUpdate заточена исключительно на ввод новой записи, а не корректировку одной (возможно последней) из старых... я бы на месте ТС после этого: ЭмоцииВ подчинённой форме появляется одна пустая строка для ввода новой записи. После заполнения последнего поля и нажатия Enter Выдавал комментарий: Запись в БД добавлена, отмена ввода невозможна! Уверяю - это очень стимулирует юзеров и заставляет думать, они начинают понимать, что ескейпы можно использовать на этапе ввода между полями, а не после того как запись уже провалилась в БД... Имхо интерфейс должен соответствовать какой то логике, если тупо открыть форму в начале сеанса и нажать эскейп - то это же не значит, что должна попасть под отмену (корректировку) запись, которая была введена последней вчера... если в интерфейсе четко разделены и обозначены операции ввод, корректировка и удаление, то путаницы обычно не бывает... а так то я не возражаю, что докрутить можно всё, сидишь набиваешь, потом свистнул - отменилось, кашлянул - удвоилось, в ладоши хлопнул - удалилось, главное помнить и не путать местами... ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2016, 13:38 |
|
2001 Предыдущая операция прервана пользователем
|
|||
---|---|---|---|
#18+
Имидж, Спасибо. Своим ответом натолкнул меня на решение, которое несколько лет не давало мене спокойно спать. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2016, 13:55 |
|
2001 Предыдущая операция прервана пользователем
|
|||
---|---|---|---|
#18+
Лапух, ты где и кому? Или какой сегодня праздник? :) ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2016, 14:22 |
|
2001 Предыдущая операция прервана пользователем
|
|||
---|---|---|---|
#18+
vmag, Это я Вам, праздника наверное нет. Просто натолкнули на мыслю. Попробую ее реализовать. Не нужно искать тайный и скрытый смысл. Просто благодарен Вам, что хоть и косвенно, но втолкнули. Видимо от радости сам не ведал чего творил и высказывал мысли в слух. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2016, 14:42 |
|
2001 Предыдущая операция прервана пользователем
|
|||
---|---|---|---|
#18+
vmagПанургvmag, ты разорвал два абзаца. В первом рассказываются действия когда запись сохраняется, во втором - отказ от сохранения . так я и хотел показать, что второй абзац после первого уже не имеет смысла... у ТС после ввода новая запись уже фигурирует в одном списке вместе со старыми, значит она уже сформирована... процедура Form_AfterUpdate заточена исключительно на ввод новой записи, а не корректировку одной (возможно последней) из старых... я бы на месте ТС после этого: ЭмоцииВ подчинённой форме появляется одна пустая строка для ввода новой записи. После заполнения последнего поля и нажатия Enter Выдавал комментарий: Запись в БД добавлена, отмена ввода невозможна! Уверяю - это очень стимулирует юзеров и заставляет думать, они начинают понимать, что ескейпы можно использовать на этапе ввода между полями, а не после того как запись уже провалилась в БД... Имхо интерфейс должен соответствовать какой то логике, если тупо открыть форму в начале сеанса и нажать эскейп - то это же не значит, что должна попасть под отмену (корректировку) запись, которая была введена последней вчера... если в интерфейсе четко разделены и обозначены операции ввод, корректировка и удаление, то путаницы обычно не бывает... а так то я не возражаю, что докрутить можно всё, сидишь набиваешь, потом свистнул - отменилось, кашлянул - удвоилось, в ладоши хлопнул - удалилось, главное помнить и не путать местами... Запись в БД НЕ-ДО-БАВ-ЛЕ-НА в описанном мною случае. Если бы это было так, то после закрытия формы (кнопкой с крестом формы или в моём случае отдельной кнопкой на панели инструментов) на которой зацикливается всё это действо по Esc, в таблице можно было бы увидеть новую запись с пустыми полями. Но этого НЕТ . Так же если не отказываться от ввода, а скажем начать вводить данные заполняя поля (не все), и так же оборвать закрыв форму то в таблице можно увидеть запись с полями которые успел заполнить. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2016, 16:30 |
|
2001 Предыдущая операция прервана пользователем
|
|||
---|---|---|---|
#18+
ЭмоцииЗапись в БД НЕ-ДО-БАВ-ЛЕ-НА в описанном мною случае. Эмоциии подчинённая форма опять переходит в режим демонстрации последних введённых параметров. Показывает в таблице с прочими и ту запись, что только что была введена. Всё окей. ЭмоцииТак же если не отказываться от ввода, а скажем начать вводить данные заполняя поля (не все), и так же оборвать закрыв форму то в таблице можно увидеть запись с полями которые успел заполнить. это противоречия ... или предыдущих записей тоже нет в БД ? Тогда где они все висят и старые и новая и та, что частично введена перед закрытием формы? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2016, 19:30 |
|
2001 Предыдущая операция прервана пользователем
|
|||
---|---|---|---|
#18+
vmagэто противоречия ... А мне кажется, нет тут противоречий. Просто описаны разные случаи: а) ввод данных и по завершении ввода Enter, в результате данные сохраняются, затем показ всех данных; б) ввод данных и завершение ввода путем закрытия формы - при этом данные, естественно, в таблицу попали; в) ввод данных и вдруг Esc, как желание отменить все введенное в данную запись и саму запись тоже (так задумано у ТС), при выполнении процедуры обработки этого события - аварийное завершение, данные НЕ сохранены, но и задумка ТС не вполне срабатывает. Вот про случай в) ТС и спрашивает. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2016, 19:50 |
|
2001 Предыдущая операция прервана пользователем
|
|||
---|---|---|---|
#18+
__Michelle, - можно попробовать полям в подчиненной форме прописать значения по умолчанию в конструкторе, возможно операция Forms![frmWorkRegime].[sfrmWorkParam].Form.RecordSource = "qryLasWorkParam" упирается где то в Null - можно попробовать перед Forms![frmWorkRegime].[sfrmWorkParam].Form.RecordSource = "qryLasWorkParam" сделать: Forms![frmWorkRegime].[sfrmWorkParam].Form.RecordSource = "" Forms![frmWorkRegime].[sfrmWorkParam].Form.Requery Но это уже будет по Анекдоту Панурга... лучше сделать для ввода отвязанную форму... ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2016, 20:30 |
|
2001 Предыдущая операция прервана пользователем
|
|||
---|---|---|---|
#18+
Эмоции, а что будет если заремить эту строку ? If KeyAscii = 27 And Me.Form.RecordSource = "qryWorkParam" Then Call Form_AfterUpdate ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2016, 20:48 |
|
2001 Предыдущая операция прервана пользователем
|
|||
---|---|---|---|
#18+
Вот, наконец дошёл до компа и смоделировал нужную часть. Запускаем форму frmWorkRegime переходим на вкладку pgs2 и жмём кнопку Новая на панели инструментов. Нужно нажать Esc, чтобы отказаться от ввода новой записи. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2016, 17:48 |
|
2001 Предыдущая операция прервана пользователем
|
|||
---|---|---|---|
#18+
Эмоции, ну ты же не проверил мой последний пост... убери перехват эскейпа (вообще заремь эту процедуру) и получишь результат... Комментарий твой вылазит из-за того, что ты нажал эскейп, акес пытается вернуть всё взад (убрать ошметки ввода), а ты его за руку держишь... Убери перехват эскейпа и брось на панель еще одну кнопку типа "Отмена ввода" которая будет делать то, что возникает при открытии формы... ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2016, 18:30 |
|
2001 Предыдущая операция прервана пользователем
|
|||
---|---|---|---|
#18+
Эмоциижмём кнопку Новая на панели инструментов у мну нет таких кнопкав. Решение неочень... ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2016, 18:51 |
|
|
start [/forum/topic.php?fid=45&msg=39358128&tid=1612897]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
279ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
56ms |
get tp. blocked users: |
1ms |
others: | 369ms |
total: | 749ms |
0 / 0 |