| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Отличия Refresh и Post |
| Автор: MacTep 24.7.2004, 00:26 |
| Чем отличается Table1.Refresh от Table1.Post? |
| Автор: Alex 24.7.2004, 06:31 | ||
Метод Refresh обновляет набор данных, приводя его в соответствие с текущим состоянием базы данных. Это часто необходимо делать, например, при смене фильтра или отказе от фильтрации, чтобы обеспечить отображение нового множества записей:
Не все наборы данных полностью поддерживают метод Refresh. Например, в компонентах TQuery метод срабатывает только в том случае, если работа идет с "живыми" данными (см. свойство RequestLive). В противном случае, для обновления данных надо закрыть и открыть соответствующий набор данных. Выполнение метода Refresh сопровождается событиями BeforeRefresh и AfterRefresh, наступающими до и после обновления. При выполнении метода Refresh делается попытка не изменять положение курсора, указывающего на текущую запись. Но это не всегда возможно. Например, при обновлении может оказаться, что данная запись уже удалена из базы данных другим пользователем. Невозможно сохранить текущую позицию также в однонаправленных наборах данных. В них после обновления курсор всегда переходит на первую запись. Вообще надо учесть, что для однонаправленных наборов данных выполнение Refresh сводится к закрытию и открытию курсора. Это связано с генерацией событий BeforeClose, AfterClose, BeforeOpen, AfterOpen. Так что надо учитывать, что при этом будут срабатывать коды обработчиков этих событий. Если метод Refresh применяется к клиентскому набору данных, то обновляется все содержимое набора. Если оказывается, что в наборе хранятся еще не зафиксированные в базе данных результаты редактирования, то генерируется исключение. В отличие от метода Refresh, метод RefreshRecord клиентских наборов данных обновляет только текущую запись, запрашивая у провайдера ее текущие значения в базе данных. В результате обновления изменяются (если есть изменения) начальные значения полей, полученные от провайдера ранее, но сохраняются все изменения, сделанные в клиентском наборе. Процедура Post заносит измененную методами Edit, Insert, Append запись в базу данных. Метод Post может в ряде случаев вызываться неявно: как последствие вызова методов навигации First, Last, Next, Prior. Поэтому прежде, чем перемещаться на новую запись, полезно проверять свойство Modified, чтобы установить, была ли изменена текущая запись. Для проверки правильности измененных данных и получения от пользователя подтверждения записи в базу данных можно использовать обработчик события BeforePost. |
| Автор: MacTep 24.7.2004, 08:40 |
| Благодабрю!!! |