Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с интерфейсов OK и Отмена, Commit и Rollback 
:(
    Опции темы
Delphist
Дата 4.12.2006, 19:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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-функций, разбор приложения на окна мн.др).
Когда-то давным-давно использовал это...
PM MAIL ICQ   Вверх
x77
Дата 4.12.2006, 19:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1255
Регистрация: 25.3.2002

Репутация: 1
Всего: 22



поскольку так или иначе всё делается через грид, то наверное проще всего повесить Commit на AfterPost. я тут не вижу особого смысла в каких-то окнах с педалями.

окно для внесения изменений есть смысл юзать для того, чтобы не дать пользователю держать открытой транзакцию. т.е. грид отображается в отдельной транзакции только для чтения, а когда юзер хочет изменить данные, то:

1. из базы берутся значения, которые он будет менять
2. формируется диалоговое окно, заполняется этими значениями и выводится на экран.
3. пользователь вводит новые значения и закрывает окно.

только после этого стартуется транзакция, вносит изменения на сервер, и сразу коммитится. в противном случае вы рискуете нарваться на ситуацию, когда пользователь открыл окно на изменение данных и поехал домой, к примеру. на выходные. и в течении нескольких суток у вас сервер будет держать открытую транзакцию со всеми вытекающими.

в вашем случае вы просто используете db-aware контролы, и смысла в кнопках "ok" | "отмена" я лично не вижу. легче автоматически коммиттить транзакцию после каждого пост или отменять после каждорго cancel. насколько я помню, FIB+ позволяет это дело отслеживать автоматически.

на правах имхо ;)


--------------------
Я никогда не сопротивлялся искушению, поскольку узнал: что мне
не нравится, то меня не искушает.
© Джордж Бернард Шоу (Ирландия)
PM MAIL ICQ   Вверх
Delphist
Дата 4.12.2006, 19:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphist Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2145
Регистрация: 3.2.2004
Где: всегда в сети

Репутация: 1
Всего: 3



Цитата(x77 @  4.12.2006,  20:30 Найти цитируемый пост)
в вашем случае вы просто используете db-aware контролы, и смысла в кнопках "ok" | "отмена" я лично не вижу. легче автоматически коммиттить транзакцию после каждого пост или отменять после каждорго cancel. насколько я помню, FIB+ позволяет это дело отслеживать автоматически.

Т.е. ты предлагаешь 2- ой вариант: заместо кнопок "ОК" и "Отмена" сделать кнопку "Закрыть" - которая просто закрывает форму. На любые изменения делать Commit.



--------------------
ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др).
Когда-то давным-давно использовал это...
PM MAIL ICQ   Вверх
x77
Дата 4.12.2006, 19:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1255
Регистрация: 25.3.2002

Репутация: 1
Всего: 22



Delphist, не совсем. поскольку у вас используется грид, я не вижу смысла в доп. окне на редактирование. проще убрать его вообще, а в FIB+ включить автокоммит транзакций.


--------------------
Я никогда не сопротивлялся искушению, поскольку узнал: что мне
не нравится, то меня не искушает.
© Джордж Бернард Шоу (Ирландия)
PM MAIL ICQ   Вверх
Delphist
Дата 4.12.2006, 20:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphist Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2145
Регистрация: 3.2.2004
Где: всегда в сети

Репутация: 1
Всего: 3



Цитата(x77 @  4.12.2006,  20:40 Найти цитируемый пост)
Delphist, не совсем. поскольку у вас используется грид, я не вижу смысла в доп. окне на редактирование. проще убрать его вообще, а в FIB+ включить автокоммит транзакций. 

А с чего ты взял, что у меня дополнительное окно грид находится на той же форме, что и кнопки и ни какого доп. окна.


--------------------
ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др).
Когда-то давным-давно использовал это...
PM MAIL ICQ   Вверх
x77
Дата 4.12.2006, 20:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1255
Регистрация: 25.3.2002

Репутация: 1
Всего: 22



а форма с гридом открывается модально?


--------------------
Я никогда не сопротивлялся искушению, поскольку узнал: что мне
не нравится, то меня не искушает.
© Джордж Бернард Шоу (Ирландия)
PM MAIL ICQ   Вверх
Delphist
Дата 5.12.2006, 09:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphist Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2145
Регистрация: 3.2.2004
Где: всегда в сети

Репутация: 1
Всего: 3



Цитата(x77 @  4.12.2006,  21:05 Найти цитируемый пост)
а форма с гридом открывается модально? 

нет это дочернее окно mdi приложения. данное окно выступает в роли справочника.


--------------------
ProcessInfo 1-ая моя программа (аналог spyxx.exe с гораздо большим функц-ом - внедрение dll в адр. простр. процесса, перехват API-функций, разбор приложения на окна мн.др).
Когда-то давным-давно использовал это...
PM MAIL ICQ   Вверх
superVad
Дата 5.12.2006, 10:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 735
Регистрация: 6.4.2006
Где: Черкассы, Украина

Репутация: 3
Всего: 15



я думамаю - вариант №2
но тут многое зависит от квалификации пользователя - например зделал юзер много изменений и нечаяно нажал отмену (в худшем случае даже этого не заметил) - и кто виноват окажеться когда это наконец всплывет?
а во втором варианте у пользователя ответственность за каждое изменение (главное ему это внушить)
как вариант можно зделать чтобы после каждого изменения появлялось окошко с подтверждением (если изменений не много)
PM MAIL   Вверх
x77
Дата 5.12.2006, 13:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1255
Регистрация: 25.3.2002

Репутация: 1
Всего: 22



Delphist, ну, тогда два варианта.

1. автокоммит на изменения, а окно просто тупо закрывать по кнопке (твой вариант № 2)
2. справочник сделать модальным окном. (зачем он нужен в качестве MDIСhild?)

тогда при втором варианте:

Код

<..>.StartTransaction;
if Form1.ShowModal = mrOk then
  try
    <..>.Commit;
  except
    ..
  end;
else
  <..>.Rollback;


тогда в операционных таблицах можно будет вызывать тот же самый справочник (для выбора какого-то значения) именно в качестве модального окна. 


--------------------
Я никогда не сопротивлялся искушению, поскольку узнал: что мне
не нравится, то меня не искушает.
© Джордж Бернард Шоу (Ирландия)
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.2492 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.