|
Отследить изменения на закрытие и отмену формы
|
|||
---|---|---|---|
#18+
Вакшуль СергейКрест, кстати не исчезает полностью. Он виден, просто заблокирован. "Висит груша, нельзя скушать". Во-во..., вот и я о том же.. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.08.2017, 20:32 |
|
Отследить изменения на закрытие и отмену формы
|
|||
---|---|---|---|
#18+
Вакшуль СергейblnSave = False вы задаете в Form_BeforeUpdate. Логичней это делать в Form_AfterUpdate(тогда, когда сохранение уже железно произошло и уже не может быть отменено) уточнить, честно говоря я blnSave в Form_BeforeUpdate прописывала, для того, чтобы при нажатии кнопки сохранить он не лез в сообщение, которое по сути относится к моменту, когда юзер жмет крестик на форме. Ведь команда DoCmd.RunCommand acCmdSaveRecord автоматически идет в Form_BeforeUpdate, разве я не права? ... |
|||
:
Нравится:
Не нравится:
|
|||
06.08.2017, 20:59 |
|
Отследить изменения на закрытие и отмену формы
|
|||
---|---|---|---|
#18+
nataxa23Вакшуль СергейКрест, кстати не исчезает полностью. Он виден, просто заблокирован. "Висит груша, нельзя скушать". Во-во..., вот и я о том же.. Да, я, собственно, что, я ничего. Что, мне больше всех надо? Это вы сами определяйтесь "шашечки вам или ехать". Или, как говорится, если уж больной решил умереть, то тут медицина бессильна. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.08.2017, 21:12 |
|
Отследить изменения на закрытие и отмену формы
|
|||
---|---|---|---|
#18+
nataxa23, nataxa23Ведь команда DoCmd.RunCommand acCmdSaveRecord автоматически идет в Form_BeforeUpdate, разве я не права? не пойму вас. DoCmd.RunCommand acCmdSaveRecord инициирует процесс сохранения записи. Это все равно, что если вы нажмете на ленте "Сохранить". Эта команда вызовет событие Form_BeforeUpdate. Но не факт, что запись в итоге будет сохранена. Если будет сохранена, значит потом произойдет событие Form_AfterUpdate, а если не будет сохранена, то Form_AfterUpdate не произойдет. А вы в независимости от результата уже только при попытке сохранить меняете ваш флаг blnSave = False Поэтому я и говорил вам: Вакшуль СергейblnSave = False вы задаете в Form_BeforeUpdate. Логичней это делать в Form_AfterUpdate(тогда, когда сохранение уже железно произошло и уже не может быть отменено) Код: plaintext 1. 2.
Код: plaintext 1. 2.
Код: plaintext 1. 2. 3.
... |
|||
:
Нравится:
Не нравится:
|
|||
06.08.2017, 21:39 |
|
Отследить изменения на закрытие и отмену формы
|
|||
---|---|---|---|
#18+
guest_rusimport, я с наскока не нашел API код, который может заблокировать крестик, если приложение работает в tabbed интерфейсе. также не нашел код, который может заблокировать крестик у формы, развернутой на весь экран(не всплывающей), при работе в традиционном ранее оконном интерфейсе(не tabbed). Если найдете источник, поделитесь, пожалуйста. Хотелось бы добить тему. ... |
|||
:
Нравится:
Не нравится:
|
|||
06.08.2017, 21:46 |
|
Отследить изменения на закрытие и отмену формы
|
|||
---|---|---|---|
#18+
Вакшуль Сергей, А я честно говоря никак не пойму, почему Вы вначале игнорируете то, что прописано в самой кнопке "Сохранить"??? Давайте на том примере который я Вам скинула. Я иду последовательно: Жмем кнопку "Кнопка12_Click": Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29.
1) В ней я прописываю с контролом так потому что он уводит фокус в другое поле (ну вот честное слово не знаю я почему, если б не уводил, то и не прописывала бы), поэтому здесь я его предварительно пытаюсь вернуть на свое место, где пользователь его оставил перед нажатием на кнопку "Кнопка12_Click". Идем дальше в коде процедуры: 2) Перед командой "DoCmd.RunCommand acCmdSaveRecord" я делаю " blnSave = True ", потому что команда сэйв автоматически ведет в Form_BeforeUpdate. "blnSave = True" по своей сути там для того, чтобы не идти прямиком в сообщение, которое если брать из вашего примера, будет выдаваться юзеру тогда и для кнопки "Кнопка12_Click". А чтобы этого не было я сделала "blnSave = True" и когда он идет в Form_BeforeUpdate то там по условию blnSave = True не пойдет в сообщение. Это же сообщение нужно в Form_BeforeUpdate нужно для момента, когда юзер жмет крест на форме, а не для кнопки сохранить. Или я не правильно строю последовательность? В пошаговом код движется именно так - в чем здесь неверна моя логика то? Другое дело, что как Вы сказали: Вакшуль Сергейне факт, что запись в итоге будет сохранена Да, такое возможно например, в моей ситуации - это как раз и есть проблема с повторяющимися значениями в полях. Пустые поля (в Вашем примере я этого не делала, но в моей форме это есть) пустые поля я проверяю перед тем как сработает команда "DoCmd.RunCommand acCmdSaveRecord"). Если находит пустышки, то сообщает об этом и благополучно выходит из процедуры "Кнопка12_Click". ... |
|||
:
Нравится:
Не нравится:
|
|||
06.08.2017, 22:25 |
|
Отследить изменения на закрытие и отмену формы
|
|||
---|---|---|---|
#18+
nataxa23, nataxa23А я честно говоря никак не пойму, почему Вы вначале игнорируете то, что прописано в самой кнопке "Сохранить"??? В чем выражается игнорирование? В том, что я обратил ваше внимание, что на то, что у вас есть код, который никогда не выполнится, а вместо этого, я должен был комментировать процедуру Кнопка12_Click? Злонамеренно игнорирую судя по количеству знаков вопроса. У вас реплика с чем связана: с тем что в процедуре Кнопка12_Click есть код по перемещению фокуса, который вы думаете я не вижу, или с тем, что то, что я до этого говорил, - ерунда и нужно присмотреться к Кнопка12_Click, где, как вы подозреваете кроется корень зла? nataxa23Зато в примере стала вылезать другая ошибка связанная с клавишей Esc мы же с вами это обсуждаем? как-то я потерял нить. Насчет Кнопка12_Click. Комментарии справа по строчкам Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
... |
|||
:
Нравится:
Не нравится:
|
|||
06.08.2017, 23:30 |
|
Отследить изменения на закрытие и отмену формы
|
|||
---|---|---|---|
#18+
Вакшуль Сергей Код: plaintext
Я его не меняю, я изначально отсюда задаю . А в Form_BeforeUpdate я уже его как раз меняю. Я прописала это значение blnSave с тем, что заметила, что когда срабатывает команда DoCmd.RunCommand acCmdSaveRecord он идет в Form_BeforeUpdate. А там соответственно, чтобы он понял, что была нажата кнопка сохранить, а не какое либо другое условие. Сергей я не утверждаю, что я делаю все на 100% правильно, я пытаюсь логически сопоставлять как срабатывает код и куда и зачем он ведет. Мне никто не говорит, вот здесь не правильно или вот тут ты не правильно продумываешь, это должно быть так и так так то, тогда код поведет туда, сюда и т.д. и т.п... Я вообще сижу одна и пытаюсь продумать все от 0 - и логику и построение кода и т.д. и т.п... - все вместе взятое. Это при том, что я не профессионал там какой нить..., который за свою жизнь сотни баз данных наклепал и имеет уже агромный опыт на подводных камнях microsoft access, а тут простите застопорился на "крестиках и ноликах". С контролами здесь я прописала тоже по такому же принципу - отталкиваясь от возникшей ошибки, пару раз она выдавалась непомню номера ее уже, по поводу того что фокус должен быть в поле. Отсюда и логика, раз фокус почему то ушел попыталась реализовать его возврат на место. Опять же все это происходит по причине, что майкрософт аксес сыпит стандартными сообщениями по ошибкам, но не всегда понятно почему она вызвалась и с чем связана. Вчера он ругнулся, а сейчас например закоментировала эти строки вроде молчит, а завтра что снова ошибку с контролами выдаст. Думаете я не понимаю, что по логике, если жмешь кнопку мышкой да даже если и гор.клавиша, то по идее конечно же фокус должен быть на кнопке и смысл переводить куда то там отсутствует. Меня тоже удивила возникшая ошибка. К сожалению я не могу на данный момент эту ошибку предъявить Вам, хотябы даже на скриншоте, но тем не менее она была. Потому такая логика и сложилась. Не судите строго, я не профи там какой то..., но и не дебил тоже. Больше того, сидишь карпеешь ищешь возможность как исправить ту или иную ошибку, делаешь делаешь, вроде как исправилась ситуация, на следующее утро хренак, снова здорова - база получается как живая, ванька дома - маньки нет, манька дома - ваньки нет... _____________ PS: я не жалуюсь, я просто устала уже, в особенности, когда застреваешь на одном месте и ходишь по кругу как пес ценой, а время проходит. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2017, 00:28 |
|
Отследить изменения на закрытие и отмену формы
|
|||
---|---|---|---|
#18+
А и еще один момент при возникновении повторяющегося значения поля он затирает потому что заходит в процедуру "Private Sub Form_Error" отрабатывает сообщение и затирает поля. А вот на Вашем примере с учетом того моего переделанного он в эту процедуру не заходит, ошибка отлавливается на кнопке - процедура "Кнопка12_Click". Парадокс для меня. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2017, 00:34 |
|
Отследить изменения на закрытие и отмену формы
|
|||
---|---|---|---|
#18+
Сергей, с имитировала Вам для наглядности ошибку, которая у меня происходит с затиранием данных. Дополнительно только сделала демонстрационную кнопку того как добавляются записи в моей форме. Это к я к тому что Вы писали: Вакшуль СергейНасчет того, что у вас затирались данные. я вам отправлял другой пример. А вы изменили таблицу applDetails поменяв местами поле первичного ключа и внешний ключ. А в форме по сути изменений не сделали. В результате смысл утрачен. В вашей форме нельзя вносить новые строки. Только править существующие. Разберитесь со связями, ключами. Все должно работать. Я внесла изменения для того, чтобы Вы могли увидеть мою версию построения с целью увидеть, обнаружить ошибку и место ее возникновения, дать разъяснения, если знаете как ее устранить. Форма моя при запуске вначале создает как бы общую запись, а затем уже происходит добавление, но только для второй таблицы. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2017, 14:22 |
|
Отследить изменения на закрытие и отмену формы
|
|||
---|---|---|---|
#18+
Вакшуль Сергейguest_rusimport, я с наскока не нашел API код, который может заблокировать крестик, если приложение работает в tabbed интерфейсе. также не нашел код, который может заблокировать крестик у формы, развернутой на весь экран(не всплывающей), при работе в традиционном ранее оконном интерфейсе(не tabbed). Если найдете источник, поделитесь, пожалуйста. Хотелось бы добить тему. Здравствуйте, Сергей! Поиски не увенчались успехом, хотя вопросы такие встречал, именно апишного решения не нашел. Хотя мне это кажется странным, ведь должно же оно быть. Но к сожалению сам не силен в этом вопросе. Тоже было бы интересно посмотреть решение. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.08.2017, 17:23 |
|
Отследить изменения на закрытие и отмену формы
|
|||
---|---|---|---|
#18+
nataxa23, в ответ на 20704108 , Вы меня втянули в отладку вашего кода, а на комментарии реагируете болезненно, поэтому чтобы закрыть тему отладки: nataxa23Зато в примере стала вылезать другая ошибка связанная с клавишей Esc я вам сделал пример, демонстрирующий, как отделить мухи от котлет. Он во вложении. Суть в том, что у вас есть три несвязанных сюжетных линии, на каждую из которых выделен свой класс: - CaptionBarButtonsPopUpFormHandler. Код: plaintext 1. 2.
- ExitDialog Код: plaintext 1. 2.
- CommandButtons Код: plaintext
Вся эта управляющая логика, вынесена из модуля вашей формы. Цель - добиться стройности кода. Вы уже сейчас запутались, а если сложность начнет нарастать, то совсем застрянете. Если вам нужно будет поработать, например, с кодом, отвечающим за диалог по ESC, то вы просто зайдете в класс ExitDialog и сосредоточитесь на его содержимом. Каждый класс - это отдельная задача. А все события формы теперь в вашем распоряжении под бизнес задачи. Я добавил еще кнопок, хотя вы не просили. Возможно, сами добавите еще или наоборот - удалите(в этом случае просто не инициируйте соотв.св-ва класса CommandButtons). Я долго не тестировал. Времени мало. И вообще - это скорее заготовка. Проникнитесь - доработаете под себя. Тему с отладкой закрываю. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.08.2017, 00:24 |
|
Отследить изменения на закрытие и отмену формы
|
|||
---|---|---|---|
#18+
guest_rusimportПоиски не увенчались успехом, хотя вопросы такие встречал, именно апишного решения не нашел. Хотя мне это кажется странным, ведь должно же оно быть. Спасибо, что потратили время. Жаль, конечно. Если получится, может поищу еще. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.08.2017, 00:28 |
|
Отследить изменения на закрытие и отмену формы
|
|||
---|---|---|---|
#18+
nataxa23Я внесла изменения для того, чтобы Вы могли увидеть мою версию построения с целью увидеть, обнаружить ошибку и место ее возникновения Наташа, я не могу повторить ошибку, о которой вы говорите(затирание полей). Вы писали: nataxa23Аксес отлавливает ошибку повторяющегося значения в этих полях, но в случае, когда повторяющееся значение содержится в поле из второй таблицы после отлова аксеса данной ошибки внести исправление уже не получается возможным. А у меня получается внести исправление. Ничего вообще не менял, просто открыл ваш файл и попробовал: - Открываю форму. - Делаю текущей самую нижнюю строку в форме(applType=4, detailsType=4) - Нажимаю на кнопку "Демонстрация кнопки Добавить запись" - Появляется новая строка в режиме редактирования. У нее applType=4. - Вношу details="текст". Вношу detailsType=3, тем самым нарушаю его уникальность - перехожу на другую строку, чтобы сохранить, выскакивает сообщение: "Вы ввели значение, которое уже существует ...". Жму ОК - изменяю detailsType на 5, и перехожу на другую строку, чтобы сохранить, выскакивает сообщение "Сохранить запись?". Жму ОК - запись сохранена ... |
|||
:
Нравится:
Не нравится:
|
|||
08.08.2017, 02:36 |
|
Отследить изменения на закрытие и отмену формы
|
|||
---|---|---|---|
#18+
Вакшуль СергейНаташа, я не могу повторить ошибку, о которой вы говорите(затирание полей). Сергей вы не можете и никогда не сможете повторить ошибку, потому что при всем уважении, простите мечетесь по сообщениям, ведя диалог на половину с тем, кто создал этот пост и на половину с тем, с кем вы сейчас пытаетесь, я так понимаю, решить уже не мою, а свою проблему с крестиком в режиме tabbed интерфейса. Моя проблема с крестиком и клавишей Esc была решена Вами же уже давным давно, за это я даже уже отписалась Вам в ответ с благодарностью, НО Вы почему то продолжаете решать эту проблему совместно с Вашим вторым оппонентом попутно отвлекаясь на мои посты, где я уже в свою очередь задала новый вопрос касающийся ошибки. Отсюда Вы сами себя дезинформируете, потому что кусками воспринимаете информацию непосредственно от меня, а попутно сейчас дезинформируете и меня как я понимаю. На Вашу реплику, что у меня проблема со связями и ключами..., см. ее в конце текста Вашего же поста: 20703777 Когда я добавила демонстрационную кнопку, я прокомментировала Вашу реплику и для наглядности добавила ее в Ваш пример (потому она блин так и называется в моем примере "Демонстрация кнопки Добавить запись"), но она была сделана только чтобы Вы поняли как работает моя форма, раз Вы стали высказывать свое предположение утверждая, что у меня неверно построены связи и ключи, а не пытались делать своих догадок тем более что предоставить Вам истинную работу формы у меня не предоставляется возможным, да и Вам это не зачем - никому не интересно сидеть и парится разбираться в чужом коде. Мне казалось что мой выложенный пример к Вашей реплике очевиден: 20705413 . Но эта кнопка не имеет никакого отношения к моему вопросу об ошибке. Че Вы к ней прицепились то??? Ваш последний пост: 20706983 как раз и подтверждает это. Изначально моя ошибка срабатывала везде, где не попадя исключительно только потому, что в самом начале я преследовала идею с выводом сообщения с тройным выбором в 2-х ситуациях: 1) если юзер жмет на крест, но запись то не сохранена (вывод MsgBox сохранить изменения? Да/Нет/Отмена). 2) если юзер жмет Esc, но запись так же не сохранена (вывод MsgBox сохранить изменения? Да/Нет/Отмена). И хотя я не пыталась особенно изменить концепцию Microsoft, а пыталась осуществить предварительный запрос пользователю чего он хочет от нажатия в этих 2-х ситуациях, если запись предварительно не сохранил, мне этого сделать не удалось. Когда Вы помогли мне с идеей блокировки креста на форме пока запись не будет сохранена, я отписалась об этом здесь: 20702132 , изменив идеологию вывода MsgBox при Esc и блокированием креста на форме, теперь сообщение об ошибке остается только в одном месте - это перед тем как сохранить данные, а не как было ранее. Именно поэтому в этом же самом посте я совершенно очевидно перешла к вопросу этой проблемы, т.к. ее мне решить тоже удается. Таким образом в моем примере Вам всего лишь нужно было просто увидеть, что когда вы забили данные с повторяющимися значениями в полях формы, то при нажатии кнопки сохранить возникает эта ошибка. Вместо этого Вы зачем то переключились на демонстрационную кнопку добавления записи и пытались работать с ней: 20706983 . Отсюда мой вывод, что не я как раз таки проявляю свою невнимательность. Больше того, на примере Вашего оппонента, очень хорошо наблюдается эдакая "мужская солидарность", мол если за клавиатурой сидит баба - это по тому же принципу, что и за рулем обезьяна с гранатой. Свою обиду с текстом сарказма в мой адрес Ваш оппонент очень хорошо продемонстрировал не только здесь, я уж просто тактично промолчала об этом и не стала тратить на это свое время. Уж больно по детски это все. Я еще раз подчеркиваю , в моем примере кнопка "Демонстрация кнопки Добавить запись" - это демонстрация того, как форма создает запись, затем после сохранения этой записи вы уже можете осуществить ДО бавление, если это потребуется. Где то здесь в самом начале звучал вопрос почему форма построена на основе общего запроса из двух таблиц. Демонстрационная кнопка тому ответ. Так же я уже писала об этом - я таким образом как бы вначале создаю общую запись, а потом к этой записи добавляю другие (если возникнет такая необходимость), данные для первой таб.уже будут заполнены и юзер будет ДОбалять данные для второй таб. Функция кнопки "Добавить" осуществляет добавление данных для второй таблицы. Вы что никогда с таким не сталкивались? Странно? По этой же самой причине в Вашем примере я внесла корректировки в таблицу, потому что мне нужно было через код иметь возможность делать добавление записей. Но когда Вы отписались: 20703777 , что я тупо изменила вашу таблицу и цитирую: «в результате смысл утрачен»..., у меня возникло впечатление, что Вы просто бегло пронаблюдали, что я внесла корректировки, но интересоваться почему не стали, а просто отписались не вникая в суть. Честно говоря, мне даже показалось, что я Вас обидела тем, что внесла свои корректировки в Ваш пример. Но моя база не построена на Вашем примере, она построена по тем нуждам и требованиям, которые нужны заказчику. Столкнувшись со своей проблемой я попыталась максимально здесь в своих постах дать идеологию по форме. Сергей, я благодарна Вам за Вашу идею с крестом на форме, а так же что потратили свое время и выложили мне еще один демонстрационный пример теперь уже с отладкой: 20706929 , буду его изучать. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.08.2017, 15:43 |
|
Отследить изменения на закрытие и отмену формы
|
|||
---|---|---|---|
#18+
феерично, вот уж не ждал, не гадал Меня нельзя игнорировать!..Я женщина нервная и даже психованная..))) ... |
|||
:
Нравится:
Не нравится:
|
|||
08.08.2017, 16:22 |
|
Отследить изменения на закрытие и отмену формы
|
|||
---|---|---|---|
#18+
nataxa23, Вы описали проблему "затирания". nataxa23в случае, когда повторяющееся значение содержится в поле из второй таблицы после отлова аксеса данной ошибки внести исправление уже не получается возможным. Он начинает затирать данные отображая в полях "#Ошибка" т.к. в тестовом примере, который сделал я проблема не выявлялась, вы сделали тестовый стенд: nataxa23с имитировала Вам для наглядности ошибку, которая у меня происходит с затиранием данных. и выложили файл здесь - 20705413 я протестировал файл и доложил: nataxa23Наташа, я не могу повторить ошибку, о которой вы говорите(затирание полей) вы: nataxa23Таким образом в моем примере Вам всего лишь нужно было просто увидеть, что когда вы забили данные с повторяющимися значениями в полях формы, то при нажатии кнопки сохранить возникает эта ошибка и буквально сразу перед этим: nataxa23вы не можете и никогда не сможете повторить ошибку Вы правы - не смог. Повторно скачал файл еще раз 20705413 и попробовал. Добиться появления в полях текста "#Ошибка" не получилось. Генерируемые вами сообщения сыпятся, а "#Ошибка" не проявляется. Как и говорил, перед тестом ваш код не трогал, работал только в форме как пользователь. Если бы вы описали пошаговую инструкцию(подобно тому, как я здесь - 20706983 ), это бы помогло: или я делаю что-то не так, или вы сделали неполное описание или у кого-то из нас проблемы с используемым софтом. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.08.2017, 23:57 |
|
Отследить изменения на закрытие и отмену формы
|
|||
---|---|---|---|
#18+
Сергей здравствуйте! Думала Вы уже не станете заглядывать в этот пост. Поскольку вопрос с ошибкой зашел в тупик, решила вывести вчера свой вопрос в отдельную тему здесь на форуме. Вакшуль СергейЕсли бы вы описали пошаговую инструкцию(подобно тому, как я здесь - 20706983 ), это бы помогло: или я делаю что-то не так, или вы сделали неполное описание или у кого-то из нас проблемы с используемым софтом. Сергей, последовательность моих действий такая: Заполняю все поля на форме. 1) поля для второй таб. (applDetails) заполняю с номером из какой-нибудь предыдущей записи 2) нажимаю кнопку сохранить 3) вижу свое отловленное сообщение - «Значение в поле «Номер» уже существует в другой записи» 4) ну а далее, если мышкой переходить по полям из второй таб. - все ок. Если же тыкнуть мышкой в любое поле из первой таблицы - вижу сообщение с ошибкой 3021 - «Текущая запись отсутствует». Это сообщение идет уже из процедуры «Form_Error». 5) в поле куда тыкали мышкой вместо введенного текста появляется «#Ошибка» Далее кроме как на «Esc» для очистки данных жмакать не куда, 6) жму «Esc» и вижу свое сообщение-вопрос «Отменить текущий ввод данных?» 7) выбираю ок - очищаю данные во всех полях. Ну а дальше можно закрывать форму или вводить данные по новой. Сергей, я скидываю свой пример, еще раз, так как в предыдущем примере кнопка добавления записи всегда доступна и думаю, что именно это Вас и ввело в заблуждение в прошлый раз, хотя мне казалось, что Вы попытаетесь осуществить разные варианты манипуляций. Здесь в примере, кнопка будет оставаться недоступной до тех пор, пока данные не будут сохранены. Так же при переходах по текущим записям поля блокируются, переход на новую запись делает поля доступными для ввода данных, т.е. так как это сделано в моей форме. На ленточной форме правда это может смотреться некорректным, но моя то форма имеет режим простой формы, а в данном примере для Вас я уже максимально приблизила то как работает моя форма и что она выполняет. Если и сейчас при возникновении ошибки, в моем примере на основе Вашего, поля все равно не будут затираться, тогда действительно уже не знаю. Возможно дело и в софте, но только просто как не верится, ну как то не похоже на это. По поводу ошибки, я склоняюсь к версии, что при срабатывании ошибки, аксес пытается уйти с записи, а поскольку запись еще не сохранена, то это приводит к ошибке. И получается замкнутый круг, при котором затираются поля, и кроме как сделать отмену больше ничего сделать нельзя. Но я не утверждаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.08.2017, 16:47 |
|
Отследить изменения на закрытие и отмену формы
|
|||
---|---|---|---|
#18+
Сергей, все таки ошибка эта не связана с софтом. Я так же ее наблюдаю и на Вашем примере взятом здесь: 20706929 Последовательность действий такая: 1) поля для первой таблицы заполняю без повторяющегося значения 2) поля для второй таблицы заполняю с повторяющимся 3) т.к. в Вашем примере кнопка демонстрационная и на ней пока я не проверю, жму навигационную кнопку перехода на новую запись 4) вижу сообщение акса «Не удалось внести изменения из-за повторяющихся значений...» 5) далее, если тыкать мышом в поле из первой таблицы, вижу сообщение акса: «Текущая запись отсутствует» 6) жму ок, в поле куда тыкалось мышом, появляется «#Ошибка», и тут же снова вижу сообщение акса см.п.5 Далее можно только делать отмену. Это тот же самый момент как и в моем примере. Теперь еще эксперимент: 1) поля для первой таблицы заполняю без повторяющегося значения 2) поля для второй таблицы заполняю с повторяющимся 3) т.к. в Вашем примере кнопка демонстрационная и на ней пока я не проверю, жму навигационную кнопку перехода на новую запись 4) вижу сообщение акса «Не удалось внести изменения из-за повторяющихся значений...» 5) исправляю в поле повторяющееся значение 6) делаю см.п.3 7) вижу новое сообщение акса: «Update или CancelUpdate без AddNew или Edit». Это ошибка - 3020. Далее можно делать отмену, если тыкать мышом в поля из первой таблицы: 8) вижу сообщение акса: «Текущая запись отсутствует» 9) жму ок, в поле куда тыкалось мышом, появляется «#Ошибка», и тут же снова вижу сообщение акса см.п.5 Далее можно только делать отмену. Отсюда мой вывод, что аксес при этой ошибке осуществляет или пытается осуществить уход с записи, а запись по факту не сохранена, что и вызывает затирку полей. Либо нужно как то заранее делать проверку на повторяющиеся значения и не давать пользователю сохранять запись, пока он не исправит значение в поле. Либо должна быть какая то команда, которая не дает возможности аксу осуществлять уход с текущей записи, если срабатывает данная ошибка. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.08.2017, 19:14 |
|
Отследить изменения на закрытие и отмену формы
|
|||
---|---|---|---|
#18+
nataxa23....Либо нужно как то заранее делать проверку на повторяющиеся значения и не давать пользователю сохранять запись, пока он не исправит значение в поле. Либо должна быть какая то команда, которая не дает возможности аксу осуществлять уход с текущей записи, если срабатывает данная ошибка.Именно об этом Вам и говорилось в сообщениях 20689773 от 31.07 и 20696551 от 2.08 ... |
|||
:
Нравится:
Не нравится:
|
|||
09.08.2017, 20:02 |
|
Отследить изменения на закрытие и отмену формы
|
|||
---|---|---|---|
#18+
Да, при определенном порядке ввода проблема "затирания" существует. При определенном, но далеко не всегда. Жаль, описание было неполное изначально. Тем не менее:Вакшуль СергейЕсли нужно сделать проверку, написать запрос или воспользоваться Dlookup, чтобы проверить, а есть ли в таблице повторяющиеся данные по определенному полю, так сделайте такой запрос. В чем проблема? Добавьте на событие формы Form_BeforeUpdate вот эту проверку: 'Проверим заполнено ли applType If IsNull(Me.applType) Then MsgBox "Не задано значение applType." & vbCr & vbCr & "Задайте applType или нажмите ESC для отказа от изменений", vbExclamation, "Сохранение" Cancel = True Exit Sub End If 'Проверять заполнено ли detailsType не надо - оно не обязательно к заполнению 'Проверим applType на повторения If Not IsNull(DFirst("id", "applications", "applType=" & Me.applType)) Then MsgBox "Значение applType = " & Me.applType & " уже используется в другой записи." & vbCr & vbCr & "Задайте другое значение applType или нажмите ESC для отказа от изменений", vbExclamation, "Сохранение" Cancel = True Exit Sub End If 'Проверим detailsType на повторения If Not IsNull(Me.applType) Then If Not IsNull(DFirst("applID", "applDetails", "detailsType=" & Me.detailsType)) Then MsgBox "Значение detailsType = " & Me.detailsType & " уже используется в другой записи." & vbCr & vbCr & "Задайте другое значение detailsType или нажмите ESC для отказа от изменений", vbExclamation, "Сохранение" Cancel = True Exit Sub End If End If ... |
|||
:
Нравится:
Не нравится:
|
|||
09.08.2017, 20:05 |
|
Отследить изменения на закрытие и отмену формы
|
|||
---|---|---|---|
#18+
с форматированием: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25.
... |
|||
:
Нравится:
Не нравится:
|
|||
09.08.2017, 20:07 |
|
Отследить изменения на закрытие и отмену формы
|
|||
---|---|---|---|
#18+
sdkuИменно об этом Вам и говорилось в сообщениях 20689773 от 31.07 и 20696551 от 2.08 Да, но Ваш пример кода мне и сейчас не говорит о том, каким образом мне тогда еще надо было сделать соответствующую проверку на повторяющиеся значения. А сами комментарии по сути были больше адресованы в сторону событий срабатывания формы по крестику и т.д..., в общем смысле для меня Ваши советы оказались запутанными и в Ваших постах я просто увидела своего рода смешанный смысл. В итоге в тот момент я мало чего поняла, что Вы хотели сказать и показать мне. Вакшуль СергейДобавьте на событие формы Form_BeforeUpdate вот эту проверку: Добавила код, но после сообщения из BeforeUpdate ошибка 3021 отрабатывается в процедуре кнопки сохранения в обработчике ошибок. Запись остается на месте, но поскольку в BeforeUpdate идет проверка обоих полей, то когда добавляется в последствии запись для второй таблицы из BeforeUpdate приходит сообщение об ошибке. Получается, что в BeforeUpdate проверять поле из первой таблицы в моем случае не получится. Но вообще тогда получается, что проверку поля из второй таблицы точно так же можно предварительно запускать в процедуре кнопки сохранения. Получается, что если обнаружит повторяющееся значение то выйдет перед командой «DoCmd.RunCommand acCmdSaveRecord». А в случае, если ошибка на повторяющееся значение будет в поле из первой таблицы, то сработает обработчик ошибок. Не знаю есть ли здесь какой то подвох? Или я снова неверно мыслю? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.08.2017, 21:19 |
|
Отследить изменения на закрытие и отмену формы
|
|||
---|---|---|---|
#18+
Наташа, Вам нужно сделать проверку. А ваш код в форме нужно переделать. Если это сделаю я, вы опять обидитесь. Код я вам дал. Направление. Все проверки вынесите в отдельную процедуру. Вызывайте эту процедуру как на BeforeUpdate, так и по клику на вашу кнопку. Если проверка не проходит - инициализируйте Cancel = true. Тогда никаких ошибок не будет. ... |
|||
:
Нравится:
Не нравится:
|
|||
09.08.2017, 21:39 |
|
Отследить изменения на закрытие и отмену формы
|
|||
---|---|---|---|
#18+
Вакшуль СергейНаташа, Вам нужно сделать проверку. А ваш код в форме нужно переделать. Если это сделаю я, вы опять обидитесь. Код я вам дал. Направление. Код в форме - это все понятно. Вакшуль СергейВсе проверки вынесите в отдельную процедуру. Вызывайте эту процедуру как на BeforeUpdate, так и по клику на вашу кнопку. Если проверка не проходит - инициализируйте Cancel = true. Тогда никаких ошибок не будет. Да я и имела в виду именно это, подразумевая под этим: nataxa23проверку поля из второй таблицы точно так же можно предварительно запускать в процедуре кнопки сохранения. Получается, что если обнаружит повторяющееся значение то выйдет перед командой «DoCmd.RunCommand acCmdSaveRecord» Только не оговорила, что через отдельную процедуру. Здесь это и так понятно. Но я так же хотела сказать, что проверку поля из первой таблицы так не сделать, потому что записи у меня добавляются путем присваивания поля со счетчиком из первой таблицы, связанному полю из второй таблицы для последующих записей. Я все время пытаюсь это сказать, вот код того как идет добавление: Код: vbnet 1. 2. 3.
Поэтому в моем случае проверка поля «applType» для первой таблицы, всегда будет сообщать об ошибке - значение всегда будет совпадать с данными в поле. Разве здесь я не права? ... |
|||
:
Нравится:
Не нравится:
|
|||
09.08.2017, 22:26 |
|
|
start [/forum/topic.php?fid=45&msg=39501590&tid=1612123]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
33ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
67ms |
get tp. blocked users: |
1ms |
others: | 16ms |
total: | 162ms |
0 / 0 |