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

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

TRxMemoryData и TFIBDataSet, Проблемы в совметсной работе


DelphiLexx ©   (2006-12-19 11:25:00) 

Ситуация следующая: Есть два грида DBGridEh'a:
dgrDDB1.DataSource = ds1;
ds1.DataSet := mdsDDB (mdsDDB: TRxMemoryData)

dgrDDB2.DataSource = ds2;
ds2.DataSet := fdsDDB (fdsDDB: TFIBDataSet)


При изменении значения Val_Xв одном из полей dgrDDB1.Field_X первого грида значения некотых полей второго грида пересчитываются в соответствии с Val_X.
Весь пересчет идет в fdsDDB.OnCalcFields. Поэтому, чтобы с эммулировать события OnCalcFields для всех записей датасета fdsDDB, я в его свойство fdsDDB.DataSource := dgrDDB1.DataSource;
Проблема возникла в следующем: пересчет значений fdsDDB идет без проблем, но вот только после пересчета в mdsDDB, а следов-но и в dgrDDB1.Field_X остается старым.
1. Как это исправить?
2. Можно предложить альтернативный способ, который бы позволял при изменении Val_Xсрабатывать fdsDDB.OnCalcFields для всех его записей.


DelphiLexx   (2006-12-20 15:40:00) [1]


> Меня не покидает ощущение, что что-то ты перемудрил при
> проектировании алгоритма. Не раскажешь про него? Т.е. какова
> цель всего этого?

Все проблема решена.


Sergey13   (2006-12-20 11:59:00) [2]

> [9] DelphiLexx ©   (20.12.06 09:57)
> Зачем, зачем... Задача у меня такая,
В первых успокойся.
В вторых, это еще вопрос - задача такая или найденный тобой способ решения этой задачи такой.

> чтобы при изменении значения 2-ого поля первого грида (которое напрямую не связано
> с каким-либо полем второго грида), повлекло за собой изменение
> 5-ти полей  второго грида для всех записей.

Может правильнее будет изменять не второй грид/датасет, а напрямую данные в БД одним запросоми переоткрывать 2 запрос? Иначе на сервер, в твоем случае, при каждом изменении 1 датасетауйдет столько апдейт-запросов, сколько записей во втором датасете и вернется столько же новых записей по рефрешу.
Меня не покидает ощущение, что что-то ты перемудрил при проектировании алгоритма. Не раскажешь про него? Т.е. какова цель всего этого?


DelphiLexx   (2006-12-20 11:44:00) [3]


> Достаточно заставить перерисоваться Второй грид (например,
>  Invalidate), что должно вызывать OnCalcFields для отобоажаемых
> в гриде записей

Invalidate грида не вызывает OnCalcFields.


ЮЮ   (2006-12-20 10:32:00) [4]

По моему, достаточно Заставить перерисоваться Второй грид (например, Invalidate), что должно вызовать OnCalcFields для отобоажаемых в гриде записей.


> И что для каждой записи второго датасета вызывать OnCalcFields.

Calc от реального отличается тем, что не хранит своего значения, а каждый раз вычисляет. Например, в случае, если надо перерисовать ячейку грида, в которой отображается это значение.


DelphiLexx   (2006-12-20 09:57:00) [5]


> И все таки - какой смысл менять сразу в 2 датасетах и зачем
> используется первый (Rx который)?

Зачем, зачем... Задача у меня такая, чтобы при изменении значения 2-ого поля первого грида (которое напрямую не связано с каким-либо полем второго грида), повлекло за собой изменение 5-ти полей  второго грида для всех записей.

P.S. Rx - используется, в связи с тем, что данные в первый грид закидываются искуственно. А вся работа с ними происходит как с реальным DataSet'ом, и скорость работы с, RxMemoryData значительнго быстрей.


Sergey13   (2006-12-20 09:48:00) [6]

И все таки - какой смысл менять сразу в 2 датасетах и зачем используется первый (Rx который)?


Sergey13   (2006-12-20 09:40:00) [7]

> [6] DelphiLexx ©   (20.12.06 09:37)

Тебе справку об этом выдать с печатью?


DelphiLexx   (2006-12-20 09:37:00) [8]


> Ну так в beforePost или afterPost первого и меняй во втором.
>  

А вообще такой подход правильный?


Sergey13   (2006-12-20 08:14:00) [9]

> [4] DelphiLexx ©   (19.12.06 17:53)
> И что для каждой записи второго датасета вызывать OnCalcFields.
А зачем ее вообще вызывать? При изменении поля она пересчитывается автоматом.


DelphiLexx   (2006-12-19 17:53:00) [10]


> Ну так в beforePost или afterPost первого и меняй во втором.
>  

И что для каждой записи второго датасета вызывать OnCalcFields.


Sergey13   (2006-12-19 11:55:00) [11]

> [2] DelphiLexx ©   (19.12.06 11:51)

Ну так в beforePost или afterPost первого и меняй во втором.
А зачем это дублирование датасетов, если все должно меняться синхронно?


DelphiLexx   (2006-12-19 11:51:00) [12]


> А зачем все так запутано и при чем тут гриды?

Если по простому, то мне нужно чтобы при изменении значения некоторого поля первого грида(по сути изменение mdsDDB), повлекло за собой изменение некоторых полей  другого грида (по сути изменение значений полей fdsDDB).


Sergey13   (2006-12-19 11:36:00) [13]

А зачем все так запутано и при чем тут гриды?


Наверх

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