Поиск:

Ответ в темуСоздание новой темы Создание опроса
> TDBGrid, Данные сохраняются раньше чем надо 
:(
    Опции темы
RomaKiev
Дата 6.4.2011, 23:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 53
Регистрация: 28.11.2010
Где: Киев

Репутация: нет
Всего: нет



Доброго времени суток!

В приложении имеется таблица, созданная с помощью компонента TDBGrid В эту таблицу заносятся данные из базы данных MySQL Я написал процедуру для обновления базы данных на основании изменений, внесённых непосредственно в таблицу. Эта процедура вызывается при нажатии кнопки. 

Но проблема вся в том,  что изменения внесённые в таблицу сразу же сохраняются в базе данных.  То есть, нажимаю я кнопку или нет, база данных всё равно обновляется. Хотелось бы чтобы это происходило только при нажатии кнопки. Может кто-нибудь знает с чем это может быть связано? Может есть какие-то свойства компонента TDBGrid или TMyQuery, которые влияют на сохранения данных в БД?

 
PM MAIL   Вверх
ZVano
Дата 7.4.2011, 10:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 259
Регистрация: 11.12.2006
Где: Украина, Кривой Р ог

Репутация: 1
Всего: 4



Вероятно, нужно использовать режим кешированых изменений.
У набора данных свойство CachedUpdates = true.

Общий алгоритм работы:
1. Загружаем данные в набор данных.
2. Редактируем их ()
Код

myDataSet->Edit();
myDataSet->FieldByName("myFieldName")->AsString = "данные";
//...

3. По клику "Сохранить" пробегаемся по набору данных и выполняем запросы к БД.
3.1 Провряем были или нет изменения
if (!myDataSet->Modified){
  //изменений не было
  return;
}
...
3.2 Выполняем изменения
Код

myDataSet->First();
while(!myDataSet->Eof()){
  // Проверяем статус записи
  //...

  myDataSet->Next();
}

3.3 Переоткрываем набор данных
myDataSet->CancelUpdates();
myDataSet->Close();
myDataSet->Open();


Должен быть более правильный способ. Но этот тоже работает.


--------------------
НЕ ФЛУДИМ. Пользуемся кнопками "+" или "-" для выражения своего отношения к теме или сообщению.
Гуглим "Как правильно задавать вопросы"
PM MAIL Skype   Вверх
_Dimon_
Дата 8.4.2011, 01:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 243
Регистрация: 25.6.2007
Где: Украина

Репутация: 1
Всего: 1



Цитата(ZVano @  7.4.2011,  10:54 Найти цитируемый пост)
Должен быть более правильный способ. Но этот тоже работает.


Желательно использовать транзакции.

PM MAIL   Вверх
ZVano
Дата 8.4.2011, 09:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 259
Регистрация: 11.12.2006
Где: Украина, Кривой Р ог

Репутация: 1
Всего: 4



Цитата(_Dimon_ @  8.4.2011,  01:41 Найти цитируемый пост)
Желательно использовать транзакци

Это понятно - транзакции необходимая часть для любого приложения, которое работает с БД.
 Но я имел ввиду способ, при котором изменения ложатся в БД при вызове метода ApplyUpdates.
В таком случае не нужно никаких циклов, проверок и т.д. Компоненті сами знают что делать.
Если не ошибаюсь: В ADO это автоматом работает (система ищет записи по совокупности полей); В IBX нужно сгенерировать шаблоны SQL-запросов в компоненте TIBDataset, либо  TIBUpdateSql.


--------------------
НЕ ФЛУДИМ. Пользуемся кнопками "+" или "-" для выражения своего отношения к теме или сообщению.
Гуглим "Как правильно задавать вопросы"
PM MAIL Skype   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0771 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.