![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вычисляемое поле [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]Что такое "вычисляемое поле"?
Что значит "обновить"?