![]() |
|
Модераторы: mihanik |
![]()
|
|
| Sardar |
|
|||
![]() Бегун ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: нет Всего: 317 |
Столкнулся с совершенно дикой проблемой, то ли я так жёстко туплю, то ли Access действительно мозги сушит.
Есть форма, используется для вставки новых записей и изменения уже существующих. Форма имеет (не уберу ни за какие коврижки) кнопку cancel и крестик на окне. При клике на любом из них все изменения должны быть отброшены и ничего не должно произойти. Звучит элементарно, но как это в Access'е? Ниже что не работает. Под не работает считаю скрытие формы и сохранение изменений в базе (бред, это не должно быть дефолтовым действием...):
-------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
|||
|
||||
| mihanik |
|
|||
![]() -=Белый Медведь=- ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 4054 Регистрация: 24.4.2006 Где: г. Тверь Репутация: 9 Всего: 109 |
Sardar, я в базах не силён, но!!!
По опыту программирования баз знаю, что кнопку "отмены" организовать в них довольно сложно, поскольку, если до апдейта записи ещё можно средствами системы как-то сделать отмену редактирования ОДНОЙ РЕДАКТИРУЕМОЙ В ДАННЫЙ МОМЕНТ записи, то после апдейта этого сделать стандартными средствами нельзя. Приходится изворачиваться. Сколько действий ты собираешься выполнять на форме? Сколько записей редактировать? Отмена, думаю, будет работать только на последнее действие. И ещё. База находится в монопольном пользовании или многопользовательском? Если многопользовательский режим, то отмену сделать будет ой как не просто!!!! Опиши подробней что именно ты хочешь? Возможно для наглядности выложишь сюда скриншот формы? |
|||
|
||||
| RockClimber |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 848 Регистрация: 5.5.2006 Где: планета 013 в тен туре Репутация: 7 Всего: 15 |
Если форма напрямую связана с таблицей - то не знаю. Но могу предложить такой вариант: форма не связана с таблицей, вносишь в нее данные, потом нажимаешь кнопку - и данные вносятся в базу (макросом - обработчиком нажатия). Нажимаешь cancel или крестик - закрывается без сохранения.
Записи можно отменять только по одной, зато довольно просто. Как вариант для нескольких записей - использовать промежуточную таблицу, по нажатию кнопки "сохранить" - данные из промежуточной копируются в основную, по нажатию cancel - наоборот, из основной в промежуточную. Но придется писать много кода. -------------------- Хорошо кинутый дятел далеко летит, крепко встревает, долго торчит. |
|||
|
||||
| Sardar |
|
||||||
![]() Бегун ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: нет Всего: 317 |
А зачем мне тогда Access, если всю форму мне придёться отдельно от логики держать и макросами значения в базу отправлять? В привычной Java + SQLite/MySQL + JFreeReport это делаеться элементарно, но меня посадили за Access, т.к. якобы разработка должна быть быстрей... сутки в никуда потерял Форма связана с таблицей. Людям свойственно писать разную лажу в форме, затем убегать через cancel или закрывать на крестик. Это я знаю по родителям, нельзя это убирать. Добавлено @ 21:48
Только текущую запись. Она открываеться через список с "живым" поиском. Навигации нет, т.е. перейти на другуюу запись пользователь через окошко не может.
В будущем в многопользовательском. Мне сказали в 2003 это просто. Вижу также база стала транзакции поддерживать, по сравнению с 2000. Скрины ничего не скажут, это просто форма, связанная с таблицей по одной записи. Все поля связаны с полями таблицы. Две кнопки, "сохранить" и "отменить", обе закрывают окошко, только "отменить" ещё и ничего делать не должна. -------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
||||||
|
|||||||
| Akina |
|
||||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 26 Всего: 454 |
Лукавите. В такой связке данные не пишутся в базу с каждым вводимым символом. -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
||||
|
|||||
| Sardar |
|
|||
![]() Бегун ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: нет Всего: 317 |
Unload событие возникает при закрытии окна, база уже обновлена. SaveData не нашёл, в референсе и в хелпе ни слова... Опытным путём замечено, Access вставляет новую строку в базу если форма открыта на "новой" строке и пользователь ввёл минимум одну букву в любое поле. Как удалить эту запись не знаю... И воообще мне просто претит эта мысль, вставить строку, обновить, сразу удалить
Я не говорил, что мне нужна запись с каждым вводимым символом. Мало того это дико, если Access это реально делает, то я даже не знаю как в этом гиморе работать... база в конечном варианте отделяеться от форм на куче терминалов Совет менеджерам: не пересаживайте программистов в другое окружение, если не уверены в возможностях этого окружения и в знаниях программиста. Могу собрать любые либы в что либо логичное и правильное. В Access'е редкий случай когда прямых путей очень мало и никак не удаётся "войти в ту волну, на которой думали разработчики" -------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
|||
|
||||
| Akina |
|
||||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 26 Всего: 454 |
Идея на то и идея, чтобы дать направление куда думать. У формы СТОЛЬКО событий... осталось выбрать нужное.
Каждый инструмент решает свои задачи. Это сообщение отредактировал(а) mihanik - 7.3.2007, 10:00 -------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
||||
|
|||||
| Sardar |
|
|||
![]() Бегун ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: нет Всего: 317 |
-------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
|||
|
||||
| mihanik |
|
|||
![]() -=Белый Медведь=- ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 4054 Регистрация: 24.4.2006 Где: г. Тверь Репутация: 9 Всего: 109 |
Уважаемые Sardar и Akina.
Вынужден прикрыть эту тему по понятным вам причинам. Sardar, создай рядышком похожую тему с точным бесстрасным изложением сути вопроса и обещаю, что мы тебе поможем решить твою проблему. |
|||
|
||||
| Sardar |
|
|||
![]() Бегун ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: нет Всего: 317 |
mihanik, извини, только ответ поставлю и закрою
У формы обнаружилось событие OnDirty, которое зажигаеться при любой введённой букве в любое текстовое поле (любом изменении любого контрола). В первом посте 4 вариант работал, но кидал исключение если изменений не было, а значит через OnDirty ловим любое изменение и выставляем переменную (скрытый чекбокс). При скрытии формы проверяем этот чекбокс, если выставлен, вызываем Undo (переход на другую запись лишний), исключений уже не будет, т.к. точно знаем что изменения были. Вот и всё Пока сквозь пальцы смотрим на лишние апдейты БД, при переходе на многопользовательский вариант (формы размножаться по терминалам), надеюсь ошибок не будет -------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
|||
|
||||
![]()
|
| Правила форума "Программирование, связанное с MS Office" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще!
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Программирование, связанное с MS Office | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |