Эта статья о редактировании / добавлении / удалении записей из полученного множества данных. Она основана на официальной документации
FireDAC множества, включая TFDQuery, TFDTable, TFDStoredProc и TFDMemTable, поддерживают вставку, редактирование и удаление записей, используя стандартные методы TDataSet. По умолчанию редактирование и отправка обновлений включены во множества FireDAC.
Как редактировать / изменять / удалять записи?
Редактирование множеств включено, когда свойство UpdateOptions.ReadOnly поставлено в False. Следующие операции возможны
Добавление записи
1 2 3 4 5 6 |
FDQuery1.Append; FDQuery1.FieldsByName('id').AsInteger := 100; FDQuery1.FieldsByName('name').AsString := 'Audi A6'; FDQuery1.Post; FDQuery1.ApplyUpdates(-1); // Если в режиме кэширования |
Редактирование
1 2 3 4 5 |
FDQuery1.Edit; FDQuery1.FieldsByName('name').AsString := 'Audi A6 Avant'; FDQuery1.Post; FDQuery1.ApplyUpdates(-1); // Если в режиме кэширования |
Удаление
1 2 3 |
FDQuery1.Delete; FDQuery1.ApplyUpdates(-1); // Если в режиме кэширования |
Чтобы избежать сообщения “Field value is required” при вызове Post, установите UpdateOptions.CheckRequired в False (по умолчанию стоит в True)
Отправка обновлений
Чтобы отправить обновления в БД, FireDAC автоматически генерирует updating SQL commands, когда исходный SQL запрос удовлетворяет следующим условиям
-тип запроса должен быть SELECT
-первая таблица во FROM должна содержать первичный ключ
-поля первичного ключа PK должны быть в SELECT
-SELECT должен быть без DISTINCT, GROUP BY, UNION и др. фраз.
Также, корректные данные должны быть предоставлены, включая уникальные идентификационные поля. Простейший путь, чтобы включить автоматические обновления, установить UpdateOptions.RequestLive в True (по умолчанию так и стоит). Нет автоматической возможности проверять, что запрос обновляем. Программист должен сделать это самостоятельно.
Если запрос не удовлетворяет этим правилам или отправка обновлений должна быть переписана overridden by the application, тогда можно использовать компонент TFDUpdateSQL или событие OnUpdateRecord.
Обновления могут быть отправлены в базу немедленно методами Post or Delete или они могут быть кэшированы и отправлены позже (cached and posted later.) Отправка обновлений отложенных обновлений может использоваться совместно с offline connections
Прим. автора Также я заметил, что если, например использовать DBGrid в качестве компонента вывода табличных данных, то любое изменение автоматически сохраняется в базе сразу после перехода на другую строку. Только в bidirectional режиме.
Опустошение множества (Emptying the Dataset)
Множество может быть опустошено наиболее эффективным способом.
- EmptyDataSet – удаляет все записи множества
- EmptyView – удаляет только доступные записи после применения фильтров, диапазонов и др.