Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
2-1151861905
Призрак
2006-07-02 21:38
2006.07.23
Передать PChar через PostMessage


2-1152013136
Urvin
2006-07-04 15:38
2006.07.23
Как ограничить количество записей


3-1148030068
petvv
2006-05-19 13:14
2006.07.23
SQL


2-1151955143
Footballer
2006-07-03 23:32
2006.07.23
Чё такое Handle?


15-1151337417
Кручен-Верчен
2006-06-26 19:56
2006.07.23
Как сделать так, чтобы Mozilla Firefox использовал HTTP 1.0?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский