Мастера DELPHI, Delphi programming community Рейтинг@Mail.ru Титульная страница Поиск, карта сайта Написать письмо 
| Новости |
Новости сайта
Поиск |
Поиск по лучшим сайтам о Delphi
FAQ |
Огромная база часто задаваемых вопросов и, конечно же, ответы к ним ;)
Статьи |
Подборка статей на самые разные темы. Все о DELPHI
Книги |
Новинки книжного рынка
Новости VCL
Обзор свежих компонент со всего мира, по-русски!
|
| Форумы
Здесь вы можете задать свой вопрос и наверняка получите ответ
| ЧАТ |
Место для общения :)
Орешник |
Коллекция курьезных вопросов из форумов
KOL и MCK |
KOL и MCK - Компактные программы на Delphi
Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / rsdn.org

 
Чтобы не потерять эту дискуссию, сделайте закладку « предыдущая ветвь | форум | следующая ветвь »

редактировалось ли поле в ClientDataset ? [D7]


Чемпаркароке ©   (19.07.17 20:44

есть некое поле в TClientDataset.
в обработчике BeforeUpdateRecord провайдера нужно выяснить, редактировалось ли поле или нет, если OldValue содержит данные, а NewValue у него IsNull.
Ведь этот null мог появиться как результат очистки поля, а может просто показывать, что поле не трогали.
Как узнать, что все-таки там происходило?


sniknik ©   (19.07.17 21:56[1]

если NewValue <> OldValue то поле редактировалось, если = не редактировалось, и неважно что там делали с новым значением, чистили снова вводили и опять чистили... раз привели к равенству со старым считай не редактировалось.


Чемпаркароке ©   (19.07.17 22:13[2]

не совсем так
если поле не редактировали, то его NewValue будет null
т.е. NewValue<>OldValue для случая, если OldValue не null

отсюда и затык


rrrrrr ©   (19.07.17 23:12[3]

ну добавь в иф сравнение с нулом.
если не равны, но один из них (или оба) нул значит не редактировалось.


Чемпаркароке ©   (19.07.17 23:20[4]


> если не равны, но один из них (или оба) нул значит не редактировалось.

не значит
может быть ситуация, что непустое вначале поле при редактировании обнулили


rrrrrr ©   (19.07.17 23:27[5]

и чо?

нулл != нулл or isnull(нулл)


rrrrrr ©   (19.07.17 23:29[6]

или ты хочешь доказать, что погромист имея два значения неизбежно заблудится в них если  там где-то нулл?


Чемпаркароке ©   (19.07.17 23:34[7]

я хочу сказать, что 2 ситуации пока для меня неотличимы:
1) OldValue <> null, NewValue = null (в результате редактирования)
2) OldValue <> null, NewValue = null (если редактирования не было в принципе)


rrrrrr ©   (19.07.17 23:48[8]

у тэфилда кроме нью и олд валуев есть еще просто валуе.
кроме того, в обработчик прилетает сорс датасет и дельта датасет

если олдвалуе не нулл, нью валуе нулл и поле не редактировалось, то угадай что лежит в валуе.


sniknik ©   (19.07.17 23:49[9]

> если поле не редактировали, то его NewValue будет null
сравнивай не с new тогда, а c CurrentValue.


sniknik ©   (20.07.17 00:53[10]

и вообще, есть же UpdateStatus, где все сравнения за тебя делаются.


Чемпаркароке ©   (26.07.17 12:20[11]


> rrrrrr ©   (19.07.17 23:48) [8]
> sniknik ©   (19.07.17 23:49) [9]

зачем вы играете в угадайку? в нее я и сам умею играть
мне был интересен совет того, кто ЗНАЕТ


sniknik ©   (26.07.17 12:28[12]

> кто ЗНАЕТ
таких нет, совсем нет..., и вообще тайных знаний типа функций "сделатькакнадо" не бывает.


Чемпаркароке ©   (26.07.17 12:29[13]

теперь докладываю результаты своих экспериментов в обработчике BeforeUpdateRecord провайдера:

> у тэфилда кроме нью и олд валуев есть еще просто валуе.

Value всегда равен NewValue

> в обработчик прилетает сорс датасет и дельта датасет

SourceDS в этом обработчике ЗАКРЫТ, поскольку он однонаправленный и уже был прочитан в ClientDadaset
DeltaDS и так анализируется - OldValue и NewValue из него

> сравнивай не с new тогда, а c CurrentValue.

CurrValue в справке описан так: CurValue may differ from OldValue if another user changed the value of the field after OldValue was read, т.е. это обновленные данные с сервера, если кто-то что-то там с ними сделал
в моем случае почему-то числовые поля всегда равны 0, строковые ""
но по-любому, к правкам на моем клиенте они отношения не имеют


Чемпаркароке ©   (26.07.17 12:31[14]

делу же помогла функция VarIsEmpty, для нее пустые значения все-таки отличаются

надеюсь, это кому-то поможет


Xackad ©   (13.08.17 22:21[15]

не совсем так
если поле не редактировали, то его NewValue будет null
т.е. NewValue<>OldValue для случая, если OldValue не null


Чемпаркароке ©   (15.08.17 14:07[16]


> Xackad ©   (13.08.17 22:21) [15]

почитай разницу между функциями VarIsEmpty и VarIsNull
null - это тоже присвоенное значение
а если поле не редактировалось, то там просто пусто, т.е. даже не null, а "ничто"


версия для печати

Написать ответ

Ваше имя (регистрация  E-mail 







Разрешается использование тегов форматирования текста:
<b>жирный</b> <i>наклонный</i> <u>подчеркнутый</u>,
а для выделения текста программ, используйте <code> ... </code>
и не забывайте закрывать теги! </b></i></u></code> :)


Наверх

  Рейтинг@Mail.ru     Титульная страница Поиск, карта сайта Написать письмо