Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.07.23;
Скачать: CL | DM;

Вниз

Сохранение или отмена изменений   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.54 MB
Время: 0.031 c
2-1152011001
Elfebet
2006-07-04 15:03
2006.07.23
Как узнать находится ли мышка на форма или нет?


1-1149598180
newby
2006-06-06 16:49
2006.07.23
Шрифт по умолчанию в создаваемых формах


15-1150734006
Ketmar
2006-06-19 20:20
2006.07.23
профессиональная деформация...


3-1148245972
lamer_y
2006-05-22 01:12
2006.07.23
Access


15-1150786464
гастрит
2006-06-20 10:54
2006.07.23
Активация винды