Форум: "Базы";
Текущий архив: 2007.03.18;
Скачать: [xml.tar.bz2];
ВнизTRxMemoryData и TFIBDataSet, Проблемы в совметсной работе Найти похожие ветки
← →
DelphiLexx © (2006-12-19 11:25) [0]Ситуация следующая: Есть два грида 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 для всех его записей.
← →
Sergey13 © (2006-12-19 11:36) [1]А зачем все так запутано и при чем тут гриды?
← →
DelphiLexx © (2006-12-19 11:51) [2]
> А зачем все так запутано и при чем тут гриды?
Если по простому, то мне нужно чтобы при изменении значения некоторого поля первого грида(по сути изменение mdsDDB), повлекло за собой изменение некоторых полей другого грида (по сути изменение значений полей fdsDDB).
← →
Sergey13 © (2006-12-19 11:55) [3]> [2] DelphiLexx © (19.12.06 11:51)
Ну так в beforePost или afterPost первого и меняй во втором.
А зачем это дублирование датасетов, если все должно меняться синхронно?
← →
DelphiLexx © (2006-12-19 17:53) [4]
> Ну так в beforePost или afterPost первого и меняй во втором.
>
И что для каждой записи второго датасета вызывать OnCalcFields.
← →
Sergey13 © (2006-12-20 08:14) [5]> [4] DelphiLexx © (19.12.06 17:53)
> И что для каждой записи второго датасета вызывать OnCalcFields.
А зачем ее вообще вызывать? При изменении поля она пересчитывается автоматом.
← →
DelphiLexx © (2006-12-20 09:37) [6]
> Ну так в beforePost или afterPost первого и меняй во втором.
>
А вообще такой подход правильный?
← →
Sergey13 © (2006-12-20 09:40) [7]> [6] DelphiLexx © (20.12.06 09:37)
Тебе справку об этом выдать с печатью?
← →
Sergey13 © (2006-12-20 09:48) [8]И все таки - какой смысл менять сразу в 2 датасетах и зачем используется первый (Rx который)?
← →
DelphiLexx © (2006-12-20 09:57) [9]
> И все таки - какой смысл менять сразу в 2 датасетах и зачем
> используется первый (Rx который)?
Зачем, зачем... Задача у меня такая, чтобы при изменении значения 2-ого поля первого грида (которое напрямую не связано с каким-либо полем второго грида), повлекло за собой изменение 5-ти полей второго грида для всех записей.
P.S. Rx - используется, в связи с тем, что данные в первый грид закидываются искуственно. А вся работа с ними происходит как с реальным DataSet"ом, и скорость работы с, RxMemoryData значительнго быстрей.
← →
ЮЮ © (2006-12-20 10:32) [10]По моему, достаточно Заставить перерисоваться Второй грид (например, Invalidate), что должно вызовать OnCalcFields для отобоажаемых в гриде записей.
> И что для каждой записи второго датасета вызывать OnCalcFields.
Calc от реального отличается тем, что не хранит своего значения, а каждый раз вычисляет. Например, в случае, если надо перерисовать ячейку грида, в которой отображается это значение.
← →
DelphiLexx © (2006-12-20 11:44) [11]
> Достаточно заставить перерисоваться Второй грид (например,
> Invalidate), что должно вызывать OnCalcFields для отобоажаемых
> в гриде записей
Invalidate грида не вызывает OnCalcFields.
← →
Sergey13 © (2006-12-20 11:59) [12]> [9] DelphiLexx © (20.12.06 09:57)
> Зачем, зачем... Задача у меня такая,
В первых успокойся.
В вторых, это еще вопрос - задача такая или найденный тобой способ решения этой задачи такой.
> чтобы при изменении значения 2-ого поля первого грида (которое напрямую не связано
> с каким-либо полем второго грида), повлекло за собой изменение
> 5-ти полей второго грида для всех записей.
Может правильнее будет изменять не второй грид/датасет, а напрямую данные в БД одним запросом и переоткрывать 2 запрос? Иначе на сервер, в твоем случае, при каждом изменении 1 датасета уйдет столько апдейт-запросов, сколько записей во втором датасете и вернется столько же новых записей по рефрешу.
Меня не покидает ощущение, что что-то ты перемудрил при проектировании алгоритма. Не раскажешь про него? Т.е. какова цель всего этого?
← →
DelphiLexx © (2006-12-20 15:40) [13]
> Меня не покидает ощущение, что что-то ты перемудрил при
> проектировании алгоритма. Не раскажешь про него? Т.е. какова
> цель всего этого?
Все проблема решена.
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2007.03.18;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.055 c