Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Сохранение или отмена изменений [D7, Access]


Страницы:   1 2

KinnOk ©   (2006-05-18 09:53:00) 

Данные редактируются в гриде.
Задача - отследить, были ли изменения, если да - то спросить, нужно их сохранять или нет. Редактируются прям в гриде.
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 ничего не изменяется, но в конец набора данных добавляется запись со значением редактируемого поля до редактирования.


Плохиш   (2006-05-18 18:04:00) [1]


> Alexey_   (18.05.06 17:42) [21]
>
> > > А вот ето "DM." выкинуть нафик пока руки не оторвали
> >
> > согласен :) увлекся :) Действительно руки привыкли DM
> бить.
> >  Обещаюсь выправить  молотком и напильником.
>
> Я, похоже, что-то упустил...  за что его выкидывать???

Потому что DM является переменной, хранящей указатель на что-то, в данном конкретном случае на конкретный экземпляр класса, а также может указывать в никуда. Вся обработка в методах класса подразумевает использование текущего экземпляра класса, ссылка на который передаётся с помощью неявного параметра self. Этот параметр по-умолчанию используется при обращении к методам/свойствам класса. Если Вы используете в программе имена конкретных переменных (DM), то тем самым Вы говорите, что в данном случае надо использовать не текущий экземпляр класса, для которого был произведён вызов метода, а конкретный ссылка на который храниться в переменной DM. Результатом таких ошибок является постоянное появление на делфимастер веток с вопросами об AV и про программы, делающие не то, что хотел создатель.


Плохиш   (2006-05-18 17:52:00) [2]


> MsGuns ©   (18.05.06 17:47) [22]
> >Alexey_   (18.05.06 17:42) [21]
> >Я, похоже, что-то упустил...  за что его выкидывать???
>
> Во-первых, дурной тон обращаться к экземпляру класса

Я бы сказал "к конкретномуэкземпляру класса"


MsGuns   (2006-05-18 17:47:00) [3]

>Alexey_   (18.05.06 17:42) [21]
>Я, похоже, что-то упустил...  за что его выкидывать???

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


Alexey_   (2006-05-18 17:42:00) [4]


> > А вот ето "DM." выкинуть нафик пока руки не оторвали
>
> согласен :) увлекся :) Действительно руки привыкли DM бить.
>  Обещаюсь выправить  молотком и напильником.

Я, похоже, что-то упустил...  за что его выкидывать???


KinnOk   (2006-05-18 13:29:00) [5]

2Плохиш  -спасибо, то что надо и без лишней суеты
зы dm уже тоже вырезал


KinnOk   (2006-05-18 13:22:00) [6]


> 1. "Локальная"
> Типа Экселя. "Все делает" грид. Проверки корректности изменений
> через события BeforePost/Insert/Delete датасета.
> Транзакции, логическая целостность БД "по боку". Применима
> для простых "баз" типа линейных справочников или "одномерных"
> объектов (один объект - одна таблица).

Именно.
Простейшая задача для простова справочника, и клиент-сервер городить для локальной однопользовательской программульки  - нет смысла.

> А вот ето "DM." выкинуть нафик пока руки не оторвали

согласен :) увлекся :) Действительно руки привыкли DM бить. Обещаюсь выправить  молотком и напильником.


> С "младенческих" лет не пользуюсь прямым редактированием
> в DB.

Повторюсь, задача слишком проста, чтоб городить клиент-сервер. Иначе б с акцессом вообще б не вязался.


> А что есть "прямое" и соответственно "НЕпрямое" (кривое?
>  8-) редактирование в БД? А то я на распутье стою. Вернее
> в раскоряку. 8-)
>

прямое - навигационными методами - append,edit,post и иже с ними.
не прямое - insert into, update, delete from...
суть такова:
1 основная таблица и около 30 - справочных,
связь - один ко многим,
lookup - сделаны, нормально все работает.
И вопрос скорее теоретического характера. В общем то подгоняется юзабилити, а не принцип работы с базой.
Просьба заказчика была такова - править прям в гриде, чисто принципиально - это возможно - тогда почему бы и нет?


Sergey13   (2006-05-18 13:14:00) [7]

2 [17] Alexey_   (18.05.06 13:06)
Если помнить, что юзер не враг и пришел работать, то этим легко эту охоту работать отбить. ИМХО.
8-)


Alexey_   (2006-05-18 13:06:00) [8]


> Можно и без предупреждения все как есть оставить.

При попытке редактировать можно спрашивать :"будем редактировать или ну его нафиг" :)


Sergey13   (2006-05-18 12:49:00) [9]

2[13] Jeer ©   (18.05.06 11:28)
А что есть "прямое" и соответственно "НЕпрямое" (кривое? 8-) редактирование в БД? А то я на распутье стою. Вернее в раскоряку. 8-)


Johnmen   (2006-05-18 12:44:00) [10]


> MsGuns ©   (18.05.06 12:40) [14]
> >Jeer ©   (18.05.06 11:28) [13]
> >С "младенческих" лет не пользуюсь прямым редактированием
> в DB.
> "Верною дорогою идете, товарищи !" (В.Л.Ульянов-Ленин)
> ;)


Куда мы пришли по этой верной дороге - общеизвестно....
:)


MsGuns   (2006-05-18 12:40:00) [11]

>Jeer ©   (18.05.06 11:28) [13]
>С "младенческих" лет не пользуюсь прямым редактированием в DB.

"Верною дорогою идете, товарищи !" (В.Л.Ульянов-Ленин)
;)


Jeer   (2006-05-18 11:28:00) [12]

С "младенческих" лет не пользуюсь прямым редактированием в DB.
Одной головной болью навсегда стало меньше.
Чего и другим желаю.


Плохиш   (2006-05-18 11:24:00) [13]


> Johnmen ©   (18.05.06 11:21) [11]
> Краеугольный вопрос - ГДЕ сохранять.

Ну судя по постaновке вопроса в [0], телепатор даже долго не думал над этим, он просто отбросил название конференции из исходных данных :-)


Johnmen   (2006-05-18 11:21:00) [14]


> Плохиш ©   (18.05.06 11:17) [10]
> Но здесь уже поздно спрашивать, нужно ли их сохранять :-
> )


Краеугольный вопрос - ГДЕсохранять.


Плохиш   (2006-05-18 11:17:00) [15]


> Johnmen ©   (18.05.06 11:15) [9]
> >Задача - отследить, были ли изменения
>
> AfterPost

Но здесь уже поздно спрашивать, нужно ли их сохранять :-)


Johnmen   (2006-05-18 11:15:00) [16]

>Задача - отследить, были ли изменения

AfterPost


Плохиш   (2006-05-18 11:09:00) [17]

О :-( А вот ето " DM." выкинуть нафик пока руки не оторвали.


Плохиш   (2006-05-18 11:08:00) [18]


> 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;


MsGuns   (2006-05-18 10:56:00) [19]

Две технологии работы с таблицейБД:

1. "Локальная"
Типа Экселя. "Все делает" грид. Проверки корректности изменений через события BeforePost/Insert/Delete датасета.
Транзакции, логическая целостность БД "по боку". Применима для простых "баз" типа линейных справочников или "одномерных" объектов (один объект - одна таблица).

2. "Клиент-серверная".
Полнофункциональная технология работы с БД любой топологии. Изменения в БД проводятся комплексно. Максимально используется логика сервера и транзакции. "Клиент" лишь отсылает одиночные команды или пакеты изменений. Клиентский интерфейс можно организовать как через грид (с использованием управляемого кэширования изменений), так и через отдельные формы, полностью управляемые приложением.


Slym   (2006-05-18 10:43:00) [20]

BatchUpdates


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо