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

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

ОТМЕНА последнего действия ! [D5, dBase, FoxPro]


Страницы:   1 2

NDR ©   (2002-08-02 13:56:00) 

надо написать процедурку! я меня получается полная фигня.
несовсем то,что нужно. а нужно вот что:

Отмена последнего действия.
Например лазил, лазил в табле и случайно что-то удалил или изменил. жмешь "отменить" . и твои последние действия (по удалению,изменению) отменяются! ну как в Excele
\ Правка \ Отменить

я незнаю как зопоминать координаты ячейки в которой произошли последние изменения. (в Excele есть координаты например A3 или B1)


Val   (2002-08-02 14:13:00) [21]

>DiamondShark © (02.08.02 14:08)
свойство CashedUpdates имеют также и TTable и TQuery.


Nikolay M.   (2002-08-02 14:11:00) [22]

Какие, на фиг, в "табле" координаты?!
Я бы делал так: поскольку обычно у пользователя есть 3 способа манипулирования над данными: добавить, удалить, изменить, то можно завести три таблицы, в которых последовательно (номерация действий должна быть сквозная для всех трех таблиц) будут идти совершенные пользователем действия (INSERT_LOG, DELETE_LOG, UPDATE_LOG). Например, если удалена строка из таблицы, делается запись в DELETE_LOG, что удалены такие-то данные (естественно, нужно написать, какие именно, чтобы можно было откатить удаление). Аналогично вставка и модификация.
Конечно, грамотнее делать транзакции, Commit/Rollback, но вопрос задан так, что, IMHO, ими обойтись не удастся.


Val   (2002-08-02 14:11:00) [23]

отвлекся на минутку и уже написал все зря :)


DiamondShark   (2002-08-02 14:10:00) [24]


> Но, вообще, для этого, лучше использовать SQL сервера.


Не надо вводить народ в заблуждение: для ЭТОГОSQL сервера не помогут.


Val   (2002-08-02 14:09:00) [25]

>IlyaA © (02.08.02 14:03)
старое значение нужно запоминать до редактирования.
>NDR (02.08.02 13:56)
есть обработчики, BeforeInsert, BeforeEdit, BeforeDelete - в них и пишите свои действия перед операциями над данными.


IlyaA   (2002-08-02 14:08:00) [26]

Извиняюсь. Mike Kouzmine (02.08.02 14:06) прав. BeforEdit


DiamondShark   (2002-08-02 14:08:00) [27]

При прямой работе с таблицами не получится.

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

Просто такой подход не реализовать.

Можно попробовать использовать ClientDataset. Там есть методы UndoLastChange, CancelUpdates. А самое главное, изменения не пишутся сразу в базу, а только при явном вызове ApplyUpdates


Mike Kouzmine   (2002-08-02 14:06:00) [28]

Если с DBF, то перед удалением запоминаешь номер записи, потом, при необходимости, восстанавливаешь. Ну а что касается восстановления значений полей, то используй механизм BeforeEdit получение значений полей, AfterPost - запись их в лог. Соответственно при желании можно восстановить значения. Но, вообще, для этого, лучше использовать SQL сервера.


IlyaA   (2002-08-02 14:03:00) [29]

Запоминай Table.RecNo - номер текущей записи и обрабатывай событие AfterEdit, где запоминай старое значение.


Страницы:   1 2

Наверх

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