Вниз
Скачать: CL | DM;

Вычисляемое поле   Найти похожие ветки 

← →
Arkady ©   (2005-10-14 09:05) [0]

Как обновить вычисляемое поле?


← →
Johnmen ©   (2005-10-14 09:13) [1]

Что такое "вычисляемое поле"?
Что значит "обновить"?


← →
ЮЮ ©   (2005-10-14 09:14) [2]

если  в DataSete, то изменив поле, участвующее в вышислении
если в таблице на сервере, то обновив запись


← →
Arkady ©   (2005-10-14 09:28) [3]

Дело в том, что значение вычисляемого поля Таблицы1 (TADODataset) есть сумма, определяемая по запросу из другой Таблицы2 (в расчете вычисляемого поля Таблицы1 не участвует ни одно из её полей). При изменении значения в Таблице2 должен быть пересчет значения вычисляемого поля текущей записи Таблицы1.


← →
ANB ©   (2005-10-14 10:30) [4]

Определить момент изменения таблицы2 и переоткрыть запрос на таблицу1.
А зачем тут вычисляемое поле ? Можно было бы и запросом сумму из другой таблицы посчитать.
Кстати, а если другой пользователь в сети таблицу2 поменяет ? Тогда уже лучшо не обновлять, т.к. пользователь замучается за морганием смотреть.

ЗЫ. Ветка не оформлена.


← →
Sergey13 ©   (2005-10-14 10:40) [5]

2[4] ANB ©   (14.10.05 10:30)
>А зачем тут вычисляемое поле ?
тут ИМХО проблемы с терминологией просто.


← →
Arkady ©   (2005-10-14 11:05) [6]


> переоткрыть запрос на таблиц

Слишком долго, изменилась только одна запись


> а если другой пользователь в сети таблицу2 поменяет

Это другой вопрос, в данном случае только один пользователь меняет таблицу2


> тут ИМХО проблемы с терминологией просто

Нет, я расчет идет именно в вычисляемом поле

P.S. Буду делать Таблица1.Edit; Таблица1.Post чтобы вызвать OnCalcFields


← →
Sergey13 ©   (2005-10-14 11:10) [7]

В запросе
Select t1.f1,sum(t2.f1) where.....
поле t2.f1 - хоть и вычисляется, но вычисляемым полем (с точки зрения Делфи и Сервера БД) не является. Вот такой парадокс. 8-)


← →
Arkady ©   (2005-10-14 11:14) [8]

Я имею в виду Таблица1Поле1.FieldKind=fkCalculated


← →
Sergey13 ©   (2005-10-14 11:22) [9]

2 [8] Arkady ©   (14.10.05 11:14)
Тогда приведи процедуру ОнКалкФилд


← →
Виталий Панасенко   (2005-10-14 11:26) [10]


> Arkady ©   (14.10.05 09:28) [3]
> Дело в том, что значение вычисляемого поля Таблицы1 (TADODataset)
> есть сумма, определяемая по запросу из другой Таблицы2 (в
> расчете вычисляемого поля Таблицы1 не участвует ни одно
> из её полей). При изменении значения в Таблице2 должен быть
> пересчет значения вычисляемого поля текущей записи Таблицы1.
>



> Arkady ©   (14.10.05 11:05) [6]
>
> > переоткрыть запрос на таблиц
>
> Слишком долго, изменилась только одна запись


А тут нет противоречия ?


← →
Arkady ©   (2005-10-14 11:31) [11]


> Sergey13 ©   (14.10.05 11:22) [9]


procedure Таблица1CalcFields(DataSet: TDataSet);
var qt:tadoquery;
…
begin
…
qt.sql.tex:=’select sum(pole1) as sss from Таблица2’ //может быть и более сложный запрос
qt.open;
Таблица1Поле1.asFloat:=qt.fieldbyname(‘sss’).asFloat;
…

end;


← →
Sergey13 ©   (2005-10-14 11:42) [12]

2 [11] Arkady ©   (14.10.05 11:31)
Тогда достаточно наверное будет убрать текущую запись с видимой части грида и вернуться обратно.

Но вычислять так - изврат полнейший, ИМХО.
Во первых - нет никакой привязки к текущей записи. Нафиг одинаковые цифры во всех записях?
Во вторых. Попробуй в эту процедуру поставить например точку останова или вывод сообщения и посчитай как часто он срабатывает.

Почему нельзя это поле вкючить в запрос датасета?

>//может быть и более сложный запрос
Это ты типа меня пугаешь? 8-)


← →
ANB ©   (2005-10-14 11:43) [13]


> Arkady ©   (14.10.05 11:31) [11]

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


← →
Arkady ©   (2005-10-14 12:04) [14]


> Тогда достаточно наверное будет убрать текущую запись с
> видимой части грида и вернуться обратно.

Если я правильно понял Таблица1Поле1.visible:=false;Таблица1Поле1.visible:=true;
то не помогает

> Нафиг одинаковые цифры во всех записях

Сорри, хотел сказать
qt.sql.tex:=’select sum(pole1) as sss from Таблица2 where тыры-пыры’


> и посчитай как часто он срабатывает

Я предельно всё упростил, можно создать отдельный DataSet, хранить в нем все результаты select по всем записям Таблицы1 и обновлять по Таблица2.post. Речь не об этом. Мне нужно обновить только вычисляемое поле текущей записи, остальные не трогать! Если нельзя по другому, то буду использовать Edit-Post.


> Почему нельзя это поле вкючить в запрос датасета?

Тогда нужно будет обновлять весь датасет, что нежелательно.


← →
ANB ©   (2005-10-14 12:27) [15]


> Arkady ©   (14.10.05 12:04) [14]

Нежелательно лазить на сервер при навигации по гриду. А проблему можно таки решить. Где то была статья про рефреш одной записи.


← →
Arkady ©   (2005-10-14 12:32) [16]


> Где то была статья про рефреш одной записи.

Если не трудно, дайте ссылку


← →
ANB ©   (2005-10-14 12:44) [17]

Это с неделю назад было. Тема была соответствующая. Полазь сам - мне некогда.


← →
ANB ©   (2005-10-14 12:45) [18]

В смысле ветка в этой же конференции.
ЗЫ. Когда поиск починят ?



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

Скачать: CL | DM;



Память: 0.49 MB
Время: 0.024 c
1-1129186838
REA
2005-10-13 11:00
2005.11.06
TTF Editor


2-1129109894
MD2005
2005-10-12 13:38
2005.11.06
определение цвета в точках


6-1121949758
SfiNx
2005-07-21 16:42
2005.11.06
Как узнать список компов с определенным портом


14-1129143627
NightLord
2005-10-12 23:00
2005.11.06
Папка


1-1129533729
Чапаев
2005-10-17 11:22
2005.11.06
GetPropInfo(TStringList, Text )=nil. Почему?




   Наверх