Форум: "Базы";
Текущий архив: 2002.10.10;
Скачать: [xml.tar.bz2];
Вниз---|Ветка была без названия|--- Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.006 c