Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.03.28;
Скачать: CL | DM;

Вниз

Странное поведение в TClientDataset   Найти похожие ветки 

 
Desdechado ©   (2004-02-24 16:35) [0]

Есть связка TSQLDataset-TDatasetProvider-TClientDataset-TDataSource
Выполняется некий запрос SELECT, результат которого модифицируется. Запрос сложный, поэтому обработка изменений делается через TDatasetProvider.BeforeUpdateRecord.
Вопрос в чем. Если запись изменилась, но не все поля, то в DeltaDS этого обработчика для неизмененных полей значение NewValue может быть либо unassigned, либо null. В связи с этим приходится каждый раз писать проверку, а не совпадает ли значение поля с OldValue, а требуется ли сохранение этих полей в БД и т.д.
Просто, если тупо брать Field.AsInteger (например), то преобразование от NULL приводит к 0 и затирает при сохранении старое значение.
Объясните кто-нибудь, зачем такие сложности в реализации поведения ClientDataSet. Ведь гораздо проще было бы, если бы NewValue содержал бы ВСЕГДА данные: если изменились - то новые, если не изменились - то старые.
Может, кто знает лучший способ проверок? Ссылочку киньте какую-нить.


 
Nikolay M. ©   (2004-02-24 18:09) [1]


> Ведь гораздо проще было бы, если бы NewValue содержал бы
> ВСЕГДА данные: если изменились - то новые, если не изменились
> - то старые

Программисты в Борланде не дураки, они делают не как проще, а как правильно. Допустим, изменил ты в одной табличке на 50 полей одно-единственное поле. Тогда, по твоей логике, на сервер должен уйти немеряный запрос, который апдейтит все 50 полей вместо одного, единственно нужного.
Конечно, если я правильно понял вопрос...


 
Desdechado ©   (2004-02-24 18:52) [2]

Я запрос конструирую сам, поэтому что отправлять на сервер тоже решаю я. Я бы просто проверял, равны ли OldValue и NewValue, а так приходится еще анализ на пустоту встраивать :(


 
Desdechado ©   (2004-02-25 11:41) [3]

народ, ну поделитесь, кто как обходит эту проблему...
или все работают с однотабличными запросами?
или не пользуются ApplyUpdates?


 
Asdor   (2004-02-25 12:00) [4]

Если не ошибаюсь (не очень хорошо помню - давно это было),
в DeltaDS при UpdateKind=ukModify содержаться по 2 записи на каждую измененную - одна - то, что было раньше, вторая - то, что изменилось.

При UpdateKind=ukDelete или ukInsert - на каждую меняющуюся запись в DeltaDS содержится по одной записи.


 
Desdechado ©   (2004-02-25 12:51) [5]

ну, это собственно и есть OldValue и NewValue
а NewValue содержит только те поля, в которых изменения были


 
Desdechado ©   (2004-02-26 14:01) [6]

посоветуйте что-нибудь, народ!


 
Polevi ©   (2004-02-26 14:27) [7]

а чем тебя "анализ на пустоту" так пугает ?


 
Desdechado ©   (2004-02-26 19:05) [8]

Да не пугает, просто у меня огромное количество кода переводится с БДЕ. А там поведение такое, как мне нравится - в новой версии записи хранятся ВСЕ поля, даже неизмененные.
А теперь придется перелопачивать все, проверять логику и поведение программ, да и вставлять везде вместо одной строчки присваивания кучу проверок не есть гуд :(



Страницы: 1 вся ветка

Текущий архив: 2004.03.28;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.033 c
1-1078405307
Demon_mhm
2004-03-04 16:01
2004.03.28
Конструктор класса, запуск с параметрами и без


14-1077819018
Soft
2004-02-26 21:10
2004.03.28
В Киеве можно купить удлинитель USB на 5 метров?


3-1077899455
Exciter
2004-02-27 19:30
2004.03.28
Заморочка с Post в TIBDataSet (4.52)


8-1069350679
aleksvz
2003-11-20 20:51
2004.03.28
MIDI


1-1078512821
К.К.С.
2004-03-05 21:53
2004.03.28
MessageDLG