![]() |
|
|
![]()
|
|
| Delphist |
|
|||
![]() Delphist Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2145 Регистрация: 3.2.2004 Где: всегда в сети Репутация: 1 Всего: 3 |
У меня возникла следующая проблема с сохранением данных в БД:
Сейчас у меня на форме есть DBGridEh который связан с TFIBDataSet'ом, ещё много чего и две кнопки "ОК" и "Отмена". Пользователь вносить изменения(добавляет, удаляет, модифицирует данные) в грид. 1) Сейчас у меня все сохранения вносятся после нажатия крестика на форме или нажатия кнопки "ОK" - которая делает Commit и закрывает форму. Кнопка "Отмена" - закрывает форму и делает Rollback. 2) Есть вариант заместо кнопок "ОК" и "Отмена" сделать кнопку "Закрыть" - которая просто закрывает форму, и после каждого изменения делать Commit т.е. FIBDataSet.AutoCommit := True; 3 Последний вариант состоит в том, чтобы оставить кнопки "ОK" и "Отмена", и в добавок на ToolBar'e разместить две кнопки (или только первую): кнопка сохранения текущих изменений(при чем форма не закрывается т.е. FibDataSet.Commit) и кнопка отмены внесенных данных(форма также не закрывается и делается FibDataSet.Rollback). Посоветуйте как правильней и нужней будет для пользователя. Если мои варианты бредовые предлагайте свои. Главное, чтобы пользователь остался доволен. Это сообщение отредактировал(а) Delphist - 4.12.2006, 19:19 -------------------- ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др). Когда-то давным-давно использовал это... |
|||
|
||||
| x77 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1255 Регистрация: 25.3.2002 Репутация: 1 Всего: 22 |
поскольку так или иначе всё делается через грид, то наверное проще всего повесить Commit на AfterPost. я тут не вижу особого смысла в каких-то окнах с педалями.
окно для внесения изменений есть смысл юзать для того, чтобы не дать пользователю держать открытой транзакцию. т.е. грид отображается в отдельной транзакции только для чтения, а когда юзер хочет изменить данные, то: 1. из базы берутся значения, которые он будет менять 2. формируется диалоговое окно, заполняется этими значениями и выводится на экран. 3. пользователь вводит новые значения и закрывает окно. только после этого стартуется транзакция, вносит изменения на сервер, и сразу коммитится. в противном случае вы рискуете нарваться на ситуацию, когда пользователь открыл окно на изменение данных и поехал домой, к примеру. на выходные. и в течении нескольких суток у вас сервер будет держать открытую транзакцию со всеми вытекающими. в вашем случае вы просто используете db-aware контролы, и смысла в кнопках "ok" | "отмена" я лично не вижу. легче автоматически коммиттить транзакцию после каждого пост или отменять после каждорго cancel. насколько я помню, FIB+ позволяет это дело отслеживать автоматически. на правах имхо ;) -------------------- Я никогда не сопротивлялся искушению, поскольку узнал: что мне не нравится, то меня не искушает. © Джордж Бернард Шоу (Ирландия) |
|||
|
||||
| Delphist |
|
|||
![]() Delphist Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2145 Регистрация: 3.2.2004 Где: всегда в сети Репутация: 1 Всего: 3 |
Т.е. ты предлагаешь 2- ой вариант: заместо кнопок "ОК" и "Отмена" сделать кнопку "Закрыть" - которая просто закрывает форму. На любые изменения делать Commit. -------------------- ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др). Когда-то давным-давно использовал это... |
|||
|
||||
| x77 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1255 Регистрация: 25.3.2002 Репутация: 1 Всего: 22 |
Delphist, не совсем. поскольку у вас используется грид, я не вижу смысла в доп. окне на редактирование. проще убрать его вообще, а в FIB+ включить автокоммит транзакций.
-------------------- Я никогда не сопротивлялся искушению, поскольку узнал: что мне не нравится, то меня не искушает. © Джордж Бернард Шоу (Ирландия) |
|||
|
||||
| Delphist |
|
|||
![]() Delphist Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2145 Регистрация: 3.2.2004 Где: всегда в сети Репутация: 1 Всего: 3 |
А с чего ты взял, что у меня дополнительное окно грид находится на той же форме, что и кнопки и ни какого доп. окна. -------------------- ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др). Когда-то давным-давно использовал это... |
|||
|
||||
| x77 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1255 Регистрация: 25.3.2002 Репутация: 1 Всего: 22 |
а форма с гридом открывается модально?
-------------------- Я никогда не сопротивлялся искушению, поскольку узнал: что мне не нравится, то меня не искушает. © Джордж Бернард Шоу (Ирландия) |
|||
|
||||
| Delphist |
|
|||
![]() Delphist Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2145 Регистрация: 3.2.2004 Где: всегда в сети Репутация: 1 Всего: 3 |
нет это дочернее окно mdi приложения. данное окно выступает в роли справочника. -------------------- ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др). Когда-то давным-давно использовал это... |
|||
|
||||
| superVad |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 735 Регистрация: 6.4.2006 Где: Черкассы, Украина Репутация: 3 Всего: 15 |
я думамаю - вариант №2
но тут многое зависит от квалификации пользователя - например зделал юзер много изменений и нечаяно нажал отмену (в худшем случае даже этого не заметил) - и кто виноват окажеться когда это наконец всплывет? а во втором варианте у пользователя ответственность за каждое изменение (главное ему это внушить) как вариант можно зделать чтобы после каждого изменения появлялось окошко с подтверждением (если изменений не много) |
|||
|
||||
| x77 |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1255 Регистрация: 25.3.2002 Репутация: 1 Всего: 22 |
Delphist, ну, тогда два варианта.
1. автокоммит на изменения, а окно просто тупо закрывать по кнопке (твой вариант № 2) 2. справочник сделать модальным окном. (зачем он нужен в качестве MDIСhild?) тогда при втором варианте:
тогда в операционных таблицах можно будет вызывать тот же самый справочник (для выбора какого-то значения) именно в качестве модального окна. -------------------- Я никогда не сопротивлялся искушению, поскольку узнал: что мне не нравится, то меня не искушает. © Джордж Бернард Шоу (Ирландия) |
|||
|
||||
![]()
|
| Правила форума "Delphi: Базы данных и репортинг" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами Обязательно указание: 1. Базы данных (Paradox, Oracle и т.п.) 2. Способа доступа (ADO, BDE и т.д.)
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |