Главная страница
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.056 c
6-1073970178
Andrey V.
2004-01-13 08:02
2004.03.28
Unable to complete network ...


4-1074257856
DillerXX
2004-01-16 15:57
2004.03.28
Фоновое приложение №2...


1-1078940709
Bulanov
2004-03-10 20:45
2004.03.28
StaticText движется рывками


1-1078335025
Merry
2004-03-03 20:30
2004.03.28
Цифры в слова


7-1073402144
KILLMAN
2004-01-06 18:15
2004.03.28
Открыть с помощью...