Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

---|Ветка была без названия|---


Mike 13 ©   (2002-09-18 18:06:00) 

вот фрагмент из хелпа по методу Refresh класса TQuery.
In particular, TQuery components do not support the Refresh method if the query is not “live”. To refresh a static TQuery, close and reopen the dataset.

Подскажите, что означает live и static запрос?


MsGuns   (2002-09-18 19:17:00) [1]

Потому что поле Company есть "родное", т.е. как бы живое, в то время как FIO есть поле сборное, суррогатное, его непосредственно нет в исх.таблице. Вот и приходится переоткрывать.
Чтобы этого избежать надо:

1. В запросе выводить все 3 составляющие как они есть, т.е.
Select ..,LName,FName,SName

2. Создать новое калькулируемое поле FIO и в событии OnCalcFields запроса написать
FIO = LName + " " + FName[1] + " " + SName[1]

Тогда в гриде будет всегда светиться "свежая" ФИО (после Refresh)


Mike 13   (2002-09-18 18:34:00) [2]

спасибо большое за ответ, многое прояснилось

но все-таки, использую запрос, в нем

select
ClientID,
Company,
FIO = LName + " " + Substring (FName, 1,1) + " " + substring (SName, 1,1)
from
Clients C, FNames FN, SNames SN where
C.FNameID*=FN.FNameID and
C.SNameID*=SN.SNameID

Dbgrid выводит данные, полученные из этого запроса. Методом query1.refreshобновляется только поле Company, FIO остается старый. Если использую
query1.close;
query1.open;
, то работает все как надо
почему?
кстати использую TADOQuery, свойства RequestLive нету


MsGuns   (2002-09-18 18:20:00) [3]

Имеется в виду след.
Если запросу не привоено св-во RequestLive, (а оно не может быть присвоено, если в запросе указан порядок сортировки, например), то при внесении в исх.таблицу (т.е. ту, на которую ставился запрос) изменений другими поллзователями, Вы эти изменения не увидите до тех пор, ока не переоткроете запрос
Query1.Close
Query1.Open

Под словом "статический" понимается то, что у вас как бы "фото" таблицы к моменту выполнения запроса и оно в любой момент времени, естественно, может не соответствовать оригиналу.

Если запрос "живой" (RequestLive := true), то для обновления курсора (состава и содержания записей в физ.таблице БД), Вам не требуется переоткрытие запроса (что часто чревато существенными задержками во времени), а достаточно просто применить метод Refresh.
Более того, "живой" запрос (точнее не сам запрос, а возвращаемый им результирующий набор данных и соотв-й ему курсор) Вы (вернее юзер, работающий с Вашим приложением)можете редактировать, добавлять, удалять и т.д. Все изменения будут автоматически (или полуавтоматически, в зависимости от установок свойств, связанных с буферизацией и кэшированием изменений), для "немедленного" внесения сделанных Вами изменений в физ.таблицу исп-ся в частности метод ApplyUpdates, после чего на дркгих компах работающие юзера смогут увидеть Ваши коррекции, если у них соответственно вызывался Refresh для живого или Close/Open для статичного Query


Наверх

Титульная страница Поиск, карта сайта Написать письмо