Форум: "Базы";
Текущий архив: 2006.07.23;
Скачать: [xml.tar.bz2];
ВнизСохранение или отмена изменений Найти похожие ветки
← →
KinnOk (2006-05-18 09:53) [0]Данные редактируются в гриде.
Задача - отследить, были ли изменения, если да - то спросить, нужно их сохранять или нет. Редактируются прям в гриде.
Beforescroll и Afterscroll - в них не видится состояние dsinsert, dsEdit.
В принципе подошел бы Beforepost, но :
procedure TDM.model_condBeforePost(DataSet: TDataSet);
begin
if mnForm.DBGridEh1.DataSource.DataSet.State in [dsinsert,dsEdit] then
begin
if MessageDlg("Данные изменились,
сохранить?",mtWarning,[mbYes,mbNo],0) = mrNo
then DM.model_cond.Cancel;
end;
в редактируемой записи по кнопке No ничего не изменяется, но в конец набора данных добавляется запись со значением редактируемого поля до редактирования.
← →
V-A-V © (2006-05-18 10:00) [1]Зачем это надо?
Грид сам все делает...
← →
Sergey13 © (2006-05-18 10:01) [2]2 KinnOk (18.05.06 09:53)
> Редактируются прям в гриде.
Если так все серьезно, то может это тот случай, когда надо не в гриде делать, а на отдельной форме?
← →
V-A-V © (2006-05-18 10:04) [3]> Sergey13
поддерживаю, это наиболее правильный вариант...
← →
KinnOk (2006-05-18 10:32) [4]
> Зачем это надо?
> Грид сам все делает...
>
Затем, что грид не предупреждает , что данные изменились. И нужны ли эти изменения. Т.е. типа зщиты от случайного нажатия.
В принципе то и так оно сойдет конечно, но все же.
> Если так все серьезно, то может это тот случай, когда надо
> не в гриде делать, а на отдельной форме?
В том то и дело, что не так и серьезно все, обычный справочник практически.
Можно и без предупреждения все как есть оставить. Но ведь есть понятие - юзабилити.
Зачем без нужды усложнять сушности?
Полей - около 30, довольно загруженная форма для редактирования получается...
← →
Slym © (2006-05-18 10:43) [5]BatchUpdates
← →
MsGuns © (2006-05-18 10:56) [6]Две технологии работы с таблицей БД:
1. "Локальная"
Типа Экселя. "Все делает" грид. Проверки корректности изменений через события BeforePost/Insert/Delete датасета.
Транзакции, логическая целостность БД "по боку". Применима для простых "баз" типа линейных справочников или "одномерных" объектов (один объект - одна таблица).
2. "Клиент-серверная".
Полнофункциональная технология работы с БД любой топологии. Изменения в БД проводятся комплексно. Максимально используется логика сервера и транзакции. "Клиент" лишь отсылает одиночные команды или пакеты изменений. Клиентский интерфейс можно организовать как через грид (с использованием управляемого кэширования изменений), так и через отдельные формы, полностью управляемые приложением.
← →
Плохиш © (2006-05-18 11:08) [7]
> KinnOk (18.05.06 09:53)
procedure TDM.model_condBeforePost(DataSet: TDataSet);
begin
if MessageDlg("Данные изменились,сохранить?",mtWarning,[mbYes,mbNo],0) = mrNo
then
begin
DM.model_cond.Cancel;
Abort;
end;
end;
← →
Плохиш © (2006-05-18 11:09) [8]О :-( А вот ето "DM." выкинуть нафик пока руки не оторвали.
← →
Johnmen © (2006-05-18 11:15) [9]>Задача - отследить, были ли изменения
AfterPost
← →
Плохиш © (2006-05-18 11:17) [10]
> Johnmen © (18.05.06 11:15) [9]
> >Задача - отследить, были ли изменения
>
> AfterPost
Но здесь уже поздно спрашивать, нужно ли их сохранять :-)
← →
Johnmen © (2006-05-18 11:21) [11]
> Плохиш © (18.05.06 11:17) [10]
> Но здесь уже поздно спрашивать, нужно ли их сохранять :-
> )
Краеугольный вопрос - ГДЕ сохранять.
← →
Плохиш © (2006-05-18 11:24) [12]
> Johnmen © (18.05.06 11:21) [11]
> Краеугольный вопрос - ГДЕ сохранять.
Ну судя по постaновке вопроса в [0], телепатор даже долго не думал над этим, он просто отбросил название конференции из исходных данных :-)
← →
Jeer © (2006-05-18 11:28) [13]С "младенческих" лет не пользуюсь прямым редактированием в DB.
Одной головной болью навсегда стало меньше.
Чего и другим желаю.
← →
MsGuns © (2006-05-18 12:40) [14]>Jeer © (18.05.06 11:28) [13]
>С "младенческих" лет не пользуюсь прямым редактированием в DB.
"Верною дорогою идете, товарищи !" (В.Л.Ульянов-Ленин)
;)
← →
Johnmen © (2006-05-18 12:44) [15]
> MsGuns © (18.05.06 12:40) [14]
> >Jeer © (18.05.06 11:28) [13]
> >С "младенческих" лет не пользуюсь прямым редактированием
> в DB.
> "Верною дорогою идете, товарищи !" (В.Л.Ульянов-Ленин)
> ;)
Куда мы пришли по этой верной дороге - общеизвестно....
:)
← →
Sergey13 © (2006-05-18 12:49) [16]2[13] Jeer © (18.05.06 11:28)
А что есть "прямое" и соответственно "НЕпрямое" (кривое? 8-) редактирование в БД? А то я на распутье стою. Вернее в раскоряку. 8-)
← →
Alexey_ (2006-05-18 13:06) [17]
> Можно и без предупреждения все как есть оставить.
При попытке редактировать можно спрашивать :"будем редактировать или ну его нафиг" :)
← →
Sergey13 © (2006-05-18 13:14) [18]2 [17] Alexey_ (18.05.06 13:06)
Если помнить, что юзер не враг и пришел работать, то этим легко эту охоту работать отбить. ИМХО.
8-)
← →
KinnOk (2006-05-18 13:22) [19]
> 1. "Локальная"
> Типа Экселя. "Все делает" грид. Проверки корректности изменений
> через события BeforePost/Insert/Delete датасета.
> Транзакции, логическая целостность БД "по боку". Применима
> для простых "баз" типа линейных справочников или "одномерных"
> объектов (один объект - одна таблица).
Именно.
Простейшая задача для простова справочника, и клиент-сервер городить для локальной однопользовательской программульки - нет смысла.
> А вот ето "DM." выкинуть нафик пока руки не оторвали
согласен :) увлекся :) Действительно руки привыкли DM бить. Обещаюсь выправить молотком и напильником.
> С "младенческих" лет не пользуюсь прямым редактированием
> в DB.
Повторюсь, задача слишком проста, чтоб городить клиент-сервер. Иначе б с акцессом вообще б не вязался.
> А что есть "прямое" и соответственно "НЕпрямое" (кривое?
> 8-) редактирование в БД? А то я на распутье стою. Вернее
> в раскоряку. 8-)
>
прямое - навигационными методами - append,edit,post и иже с ними.
не прямое - insert into, update, delete from...
суть такова:
1 основная таблица и около 30 - справочных,
связь - один ко многим,
lookup - сделаны, нормально все работает.
И вопрос скорее теоретического характера. В общем то подгоняется юзабилити, а не принцип работы с базой.
Просьба заказчика была такова - править прям в гриде, чисто принципиально - это возможно - тогда почему бы и нет?
← →
KinnOk (2006-05-18 13:29) [20]2Плохиш -спасибо, то что надо и без лишней суеты
зы dm уже тоже вырезал
← →
Alexey_ (2006-05-18 17:42) [21]
> > А вот ето "DM." выкинуть нафик пока руки не оторвали
>
> согласен :) увлекся :) Действительно руки привыкли DM бить.
> Обещаюсь выправить молотком и напильником.
Я, похоже, что-то упустил... за что его выкидывать???
← →
MsGuns © (2006-05-18 17:47) [22]>Alexey_ (18.05.06 17:42) [21]
>Я, похоже, что-то упустил... за что его выкидывать???
Во-первых, дурной тон обращаться к экземпляру класса
Во-вторых, неоправданное использование в кодовых конструкциях обращений в владельцам адресуемых объектах (в данном случае - экземпляру класса, к которому принадлежит процедура) загромождает код, делая его менее читабельным.
← →
Плохиш © (2006-05-18 17:52) [23]
> MsGuns © (18.05.06 17:47) [22]
> >Alexey_ (18.05.06 17:42) [21]
> >Я, похоже, что-то упустил... за что его выкидывать???
>
> Во-первых, дурной тон обращаться к экземпляру класса
Я бы сказал "к конкретному экземпляру класса"
← →
Плохиш © (2006-05-18 18:04) [24]
> Alexey_ (18.05.06 17:42) [21]
>
> > > А вот ето "DM." выкинуть нафик пока руки не оторвали
> >
> > согласен :) увлекся :) Действительно руки привыкли DM
> бить.
> > Обещаюсь выправить молотком и напильником.
>
> Я, похоже, что-то упустил... за что его выкидывать???
Потому что DM является переменной, хранящей указатель на что-то, в данном конкретном случае на конкретный экземпляр класса, а также может указывать в никуда. Вся обработка в методах класса подразумевает использование текущего экземпляра класса, ссылка на который передаётся с помощью неявного параметра self. Этот параметр по-умолчанию используется при обращении к методам/свойствам класса. Если Вы используете в программе имена конкретных переменных (DM), то тем самым Вы говорите, что в данном случае надо использовать не текущий экземпляр класса, для которого был произведён вызов метода, а конкретный ссылка на который храниться в переменной DM. Результатом таких ошибок является постоянное появление на делфимастер веток с вопросами об AV и про программы, делающие не то, что хотел создатель.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2006.07.23;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.011 c