| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C++ Builder > TDBGrid |
| Автор: RomaKiev 6.4.2011, 23:15 |
| Доброго времени суток! В приложении имеется таблица, созданная с помощью компонента TDBGrid В эту таблицу заносятся данные из базы данных MySQL Я написал процедуру для обновления базы данных на основании изменений, внесённых непосредственно в таблицу. Эта процедура вызывается при нажатии кнопки. Но проблема вся в том, что изменения внесённые в таблицу сразу же сохраняются в базе данных. То есть, нажимаю я кнопку или нет, база данных всё равно обновляется. Хотелось бы чтобы это происходило только при нажатии кнопки. Может кто-нибудь знает с чем это может быть связано? Может есть какие-то свойства компонента TDBGrid или TMyQuery, которые влияют на сохранения данных в БД? |
| Автор: ZVano 7.4.2011, 10:54 | ||||
| Вероятно, нужно использовать режим кешированых изменений. У набора данных свойство CachedUpdates = true. Общий алгоритм работы: 1. Загружаем данные в набор данных. 2. Редактируем их ()
3. По клику "Сохранить" пробегаемся по набору данных и выполняем запросы к БД. 3.1 Провряем были или нет изменения if (!myDataSet->Modified){ //изменений не было return; } ... 3.2 Выполняем изменения
3.3 Переоткрываем набор данных myDataSet->CancelUpdates(); myDataSet->Close(); myDataSet->Open(); Должен быть более правильный способ. Но этот тоже работает. |
| Автор: _Dimon_ 8.4.2011, 01:41 |
Желательно использовать транзакции. |
| Автор: ZVano 8.4.2011, 09:13 |
Это понятно - транзакции необходимая часть для любого приложения, которое работает с БД. Но я имел ввиду способ, при котором изменения ложатся в БД при вызове метода ApplyUpdates. В таком случае не нужно никаких циклов, проверок и т.д. Компоненті сами знают что делать. Если не ошибаюсь: В ADO это автоматом работает (система ищет записи по совокупности полей); В IBX нужно сгенерировать шаблоны SQL-запросов в компоненте TIBDataset, либо TIBUpdateSql. |