C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Обновление данных в запросе
Pan-SQL
Отправлено: 06.04.2005, 10:49


Не зарегистрирован







Здравствуйте, подскажите, если кто знает, как обновить данные в запросе при добавлении записи в таблицу. Можно использовать "Метод чайника", т. е. свойство Active компонента Query задавать false, а потом true, но я хочу это сделать более лучшим сбособом. Заранее большое спасибо.
olegenty
Отправлено: 06.04.2005, 13:43


Ветеран

Группа: Модератор
Сообщений: 2412



"более лучшие" способы требуют недетских усилий.
1. все пользователи системы должны некоторым способом получить сообщение о том, что некий пользователь сделал нечто над неким объектом БД, а также — что именно. особенно важно получить инфу о том, что именно. если это был UPDATE всей таблицы, например, то пара Close(), Open() — то, что надо.
2. по инфе об изменении нужно предпринять какие-то действия, типа сформировать некую Delta и догрузить её в буфер клиента (или что-то другое). такого рода работка вообще возможна только на клиентских наборах.

на мой взгляд — Close() + Open() — не самое худшее из решений, при условии, что пользователь на клиента получает выборки минимального размера. край — до 1000 записей, лучше — меньше.
Gedeon
Отправлено: 06.04.2005, 14:03


Ветеран

Группа: Модератор
Сообщений: 1742



Ну тут еще зависит от компонентов доступа, например в TADOQuery->Requery, есть методы ReOpen и т.д. тут коннкретный компонент важен.
AVC
Отправлено: 06.04.2005, 16:29


Ветеран

Группа: Модератор
Сообщений: 1583



А я вполне успешно юзаю Active true/false с прибамбасами.
Для "более лучшего способа" можно попробовать кеширование, но это может стать далеко не "лучшим способом" — все зависит от запросов и задач.
Gedeon
Отправлено: 06.04.2005, 16:58


Ветеран

Группа: Модератор
Сообщений: 1742



На TADOQuery если использовать параметр т.е. :@Param в запросе
и соответственно в коде менять Q->ParamByName("@Param")->AsInteger =10;
Requery происходит быстрее, чем Close()/Open() (Active — true/false)
Проверял экспериментально.
AVC
Отправлено: 06.04.2005, 17:03


Ветеран

Группа: Модератор
Сообщений: 1583



Хм. Интересно. Жаль ADO не пользую.
olegenty
Отправлено: 07.04.2005, 07:05


Ветеран

Группа: Модератор
Сообщений: 2412



Меня ReQuery тоже не спасает, я работаю с TMemTableEh + TADODataDriverEh. Компоненты чуть сыроваты, но методом проб и ошибок и я уже узнал большую часть граблей, и наступаю рядом smile.gif

Вернуться в Работа с базами данных в C++Builder