Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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.041 c
15-1171515334
Windows ME
2007-02-15 07:55
2007.03.18
Hasta la Vista


15-1171669892
SerJaNT
2007-02-17 02:51
2007.03.18
Mandriva Linux 2007 PowerPack на русском языке


15-1171865166
Чапаев
2007-02-19 09:06
2007.03.18
Звериный оскал копирайта %-)


2-1172270538
Riply
2007-02-24 01:42
2007.03.18
Положительные или отрицательные стороны оператора With


15-1172065846
Pazitron_Brain
2007-02-21 16:50
2007.03.18
Мать





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский