Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Сравнить 2 Variant (Field.OldValue и FIeld.Value) / 7 сообщений из 7, страница 1 из 1
21.05.2019, 13:42
    #39815788
Valery_B
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнить 2 Variant (Field.OldValue и FIeld.Value)
Добрый день,

Есть FireDac-Dataset(TFDMemTable), в нём есть поле TBlobField,
Этому полю привязан контрол, который с ним работает (записывает/читает в это поле, формат XML).

Надо понять, были ли внесены в это поле изменения ?

Я написал так:
Код: pascal
1.
if Field.OldValue <> Field.Value then


На чём вылезает ошибка Cannot convert vararray to integer.
Пробовал VarSameValue и VarCompareValue - ошибка.

Как можно сравнить эти два значения ?

п.с. у TBlobField есть свойство Modified, но оно в моём случае false, даже если я изменяю это поле.
...
Рейтинг: 0 / 0
21.05.2019, 13:54
    #39815802
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнить 2 Variant (Field.OldValue и FIeld.Value)
Выгрузить в потоки и сравнить участки памяти?
...
Рейтинг: 0 / 0
21.05.2019, 14:34
    #39815834
Соколинский Борис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнить 2 Variant (Field.OldValue и FIeld.Value)
wadmanВыгрузить в потоки Можно просто VarArrayLock().
...
Рейтинг: 0 / 0
21.05.2019, 14:43
    #39815842
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнить 2 Variant (Field.OldValue и FIeld.Value)
Хорошо бы сначала доказать, что для BLOB'а OldValue вообще хранится.

IMHO & AFAIK

Например в Oracle BLOB это просто BLOB Locator. Данные в LOB меняются, но LOB Locator все равно неизменен. Т.ч. Modified = false для Oracle BLOB это действительно единственно возможное истинное значение. (так же по этой причине не срабатывают тригера в БД. Т.к. значение строки данных в таблице не меняется)
...
Рейтинг: 0 / 0
21.05.2019, 16:53
    #39815930
Valery_B
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнить 2 Variant (Field.OldValue и FIeld.Value)
wadmanВыгрузить в потоки и сравнить участки памяти?
Да, я так тоже хотел - перевести в Base64 и сравнить строки.
Но я если я создаю поток CreateBlobStream, то он создаётся от текущего значения. Я не могу создать поток от OldValue.
...
Рейтинг: 0 / 0
21.05.2019, 16:56
    #39815933
Valery_B
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнить 2 Variant (Field.OldValue и FIeld.Value)
Соколинский БорисwadmanВыгрузить в потоки Можно просто VarArrayLock().
Я смотрел на исходники VarSameValue, там использовалась эта функция, но я не понял что с ней делать.

Можно пример ?
...
Рейтинг: 0 / 0
22.05.2019, 07:44
    #39816138
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сравнить 2 Variant (Field.OldValue и FIeld.Value)
Valery_BwadmanВыгрузить в потоки и сравнить участки памяти?
Да, я так тоже хотел - перевести в Base64 и сравнить строки.
Но я если я создаю поток CreateBlobStream, то он создаётся от текущего значения. Я не могу создать поток от OldValue.
Еще вариант: считать контрольные сумму до изменения и после.
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Сравнить 2 Variant (Field.OldValue и FIeld.Value) / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]