Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.10.10;
Скачать: CL | DM;

Вниз

---|Ветка была без названия|---   Найти похожие ветки 

 
Mike 13   (2002-09-18 18:06) [0]

вот фрагмент из хелпа по методу 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 18:20) [1]

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

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

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


 
Mike 13   (2002-09-18 18:34) [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 19:17) [3]

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

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

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

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



Страницы: 1 вся ветка

Текущий архив: 2002.10.10;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.031 c
4-32112
anod
2002-08-22 18:00
2002.10.10
GetOpenFileName


1-31823
Андреев Павел
2002-09-27 11:58
2002.10.10
hint


1-31695
123000
2002-09-30 16:14
2002.10.10
Папки


3-31601
kioto_
2002-09-18 21:36
2002.10.10
Как работать с *.dbf как просто с табличными файлами ?


1-31744
Magic
2002-10-01 13:53
2002.10.10
Тултипы