Помощь - Поиск - Пользователи - Календарь
Полная версия: Отмена удаления строки: вопрос
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Делфи
1147
Можно ли вернуть в базу данных удаленную строку из таблицы?
Ctrl+z в данном случае не помогает, cancelupdates тоже.
Например пользователь случайно выделил не ту строку и удалил ее. Как можно отменить это действие?
volvo
Если ты не работал с "отложенными изменениями" (Batch Updates), то данные утеряны безвозвратно.
1147
Нет, с отложенными замисями не работал. Но записи нельзя терять безвозвратно. Ты мог бы по подробней объяснить как этого не допустить?
volvo
Тип БД какой? (Paradox/IB/Oracle/...) Метод доступа к данным? (ADO/BDE/ODBC/...)
1147
MS Access, ADO
volvo
Устанавливаешь в DataSet (что там у тебя, таблица? Значит, ADOTable) свойство LockType в ltBatchOptimistic (что означает пакетные изменения), и добавляешь пару кнопок: "Применить" и "Отменить". Вот с такими обработчиками:
// Это - "Применить"
procedure TForm1.btnApplyClick(Sender: TObject);
begin
ADOTable1.UpdateBatch();
end;

// Это - "Отменить"
procedure TForm1.btnCancelClick(Sender: TObject);
begin
ADOTable1.CancelBatch();
end;

Если теперь удалишь строку из Dataset-а по ошибке, то можно восстановить изменения, нажав на "Отменить". Визуально после удаления строка из Грида исчезнет, фактически из базы - нет, пока не будет применен метод UpdateBatch... Ну, а если уж нажал на "Применить" (второй раз ошибочно? Не может быть, это уже осознанно smile.gif ) - то потом откат сделать нельзя...
1147
ясно. Большое спасибо!
1147
Допустим, из таблицы было удалено несколько десятков строк. И после этого удаляется одна по ошибке. Нужно вернуть только последнюю удаленную, а таким способом вернутся все строки если при каждом удалении не нажимать "применить".
Нет ли спобоса возвращать удаленные строки не все сразу, а по-одной (по принципу ctrl+z), начиная с последней удаленной?
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.