Поиск:

Ответ в темуСоздание новой темы Создание опроса
> кеширование в ADO 
:(
    Опции темы
Otouto
Дата 13.1.2010, 20:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



всем привет.


не мог бы кто нибудь объяснить как организовать кеширование данных в модели ADO.


нужно для:


есть несколько DBEdit-ов.  нужно что бы данные заносились не сразу после записи их в отдельный DBEdit, а после заполнения всей строки таблицы.  Допустим у нас 5 полей в таблице, мы заполняем 5 DBEdit-ов потом жмем кнопку "Добавить"  и вносится новая строка. (ну или редактируется старая, в зависимости от выбора)



я так понял что пока я не нажму кнопку "Добавить" данные должны кешироваться, как это сделать?  знаю что у ADOTable есть свойство CacheSize, но не сильно понял пока как с ним рабоать
PM MAIL   Вверх
artsb
Дата 13.1.2010, 20:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

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



Здесь кэширование не нужно.
Размещаете на форме обычные Edit'ы.

Заполняете их.
При нажатии на кнопку добавить:
Код

ADOTable1->Insert(); // вставить новую пустую строку
// теперь заполняете поля удобным для вас способом, например
ADOTable1->FieldByName("some_field")->AsString = Edit1->Text;
// и так все поля
ADOTable1->Post(); // записать в БД

При нажатии кнопки изменить, вместо Insert вызываете метод Edit. Остальное также. Единственное, может некоторые поля придётся по-другому заполнять (например, многострочное поле желательно сначала очистить, но это ещё зависит от конкретной ситуации).


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
Otouto
Дата 13.1.2010, 20:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



угу. этот способ работает.  спасибо


но т.к. это курсак, разобраться надо именно с ДБЭдитом и кешированием,  так что если не сложно напишите несколько слов об этом
PM MAIL   Вверх
artsb
Дата 13.1.2010, 22:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

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



Тогда можно сделать так:
Завести флаг. И проверять его в событии BeforPost. Взводить флаг только после нажатия кнопки "Сохранить" или "Добавить".
Код

bool flag = false;
// ...
void __fastcall TForm1::ADOTable1BeforePost(TDataSet *DataSet)
{
if(!flag) {
 ADOTable1->Cancel();
 return; 
}
flag = false;
}
// клик на кнопке "Сохранить"
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 // проверка правильности данных
 // заполнение полей
 flag = true;
 ADOTable1->Post();
}
// клик на кнопке "Добавить"
void __fastcall TForm1::Button2Click(TObject *Sender)
{
 // проверка правильности данных
 ADOTable1->Insert();
 // заполнение полей
 flag = true;
 ADOTable1->Post();
}

Что-то типа такого...

Это сообщение отредактировал(а) artsb - 13.1.2010, 22:04


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C++: Базы данных"
chipset

Данный форум предназначен для обсуждения вопросов прямым образом связанных с C++ и БД. Так, вопросы только по C++ следует задавать в C++:Общие вопросы а вопросы по абстрактным БД в Базах данных или в соответствующих под-форумах.

Благодарим за понимание.


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

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


 




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


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

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