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

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

Вычисляемое поле [D7, MSSQL]


Arkady ©   (2005-10-14 09:05:00) 

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


ANB   (2005-10-14 12:45:00) [1]

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


ANB   (2005-10-14 12:44:00) [2]

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


Arkady   (2005-10-14 12:32:00) [3]


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

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


ANB   (2005-10-14 12:27:00) [4]


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

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


Arkady   (2005-10-14 12:04:00) [5]


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

Если я правильно понял Таблица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 11:43:00) [6]


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

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


Sergey13   (2005-10-14 11:42:00) [7]

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

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

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

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


Arkady   (2005-10-14 11:31:00) [8]


> 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;


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


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



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


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


Sergey13   (2005-10-14 11:22:00) [10]

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


Arkady   (2005-10-14 11:14:00) [11]

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


Sergey13   (2005-10-14 11:10:00) [12]

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


Arkady   (2005-10-14 11:05:00) [13]


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

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


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

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


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

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

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


Sergey13   (2005-10-14 10:40:00) [14]

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


ANB   (2005-10-14 10:30:00) [15]

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

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


Arkady   (2005-10-14 09:28:00) [16]

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


ЮЮ   (2005-10-14 09:14:00) [17]

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


Johnmen   (2005-10-14 09:13:00) [18]

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


Наверх

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