![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
ОТМЕНА последнего действия ! [D5, dBase, FoxPro]
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, где запоминай старое значение.