powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как проверить изменилось ли поле в датасете?
7 сообщений из 7, страница 1 из 1
Как проверить изменилось ли поле в датасете?
    #32962231
Philin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пишу в C++ Builder 6.0. Использую TADODataSet (LockType==ltBatchOptimistic).
Бегу по датасету смотрю свойство RecordStatus.
Если (DataSet->RecordStatus.Contains(rsModified)), то мне нужно пробежаться по всем полям DataSet'а и определить какие из них были изменены в процессе редактирования. К сожалению вот так проверять не получается:
Код: plaintext
if (Cursor->FieldByName(aCursorFields[i])->OldValue != Cursor->FieldByName(aCursorFields[i])->NewValue)
потому что иногда значения OldValue и NewValue могут быть NULL... и получаем эксепшин Invalid Variant Operation.

Понятно, что можно добавить дополнительные условия проверки на NULL, но мне кажется должно быть какое-то средство для определения изменилось ли значения поля... Может кто-нибудь в курсе?
...
Рейтинг: 0 / 0
Как проверить изменилось ли поле в датасете?
    #32962327
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сомневаюсь, что такое есть - слишком накладно для каждой записи хранить доп.флаг изменения.
Обычно это проблемы клиента. Или есть спец-компоненты на основе DataSet.
______________________________________________
Вы имеете право хранить молчание! Всё что Вы скажете может быть использовано против Вас в суде!
...
Рейтинг: 0 / 0
Как проверить изменилось ли поле в датасете?
    #32962349
Philin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
я про свойство датасета и спрашиваю... или TField'а..... естественно информация на клиенте...
...
Рейтинг: 0 / 0
Как проверить изменилось ли поле в датасете?
    #32962461
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Philinя про свойство датасета и спрашиваю... или TField'а..... естественно информация на клиенте...
А я про него и говорю. Не знаю как в вашем компиляторе - в Delphi есть компонент "Пакетных отложенных изменений". Помнит какие записи изменялись и автоматом кидает на сервер тока изменённые.
...
Рейтинг: 0 / 0
Как проверить изменилось ли поле в датасете?
    #32962532
Philin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Помнит какие записи изменялись
Как найти измененные записи я знаю.... см. выше.
я не могу определить изменилось ли поле .
и автоматом кидает на сервер тока изменённые.
автоматом класть измененные записи мне не нужно.
...
Рейтинг: 0 / 0
Как проверить изменилось ли поле в датасете?
    #32964749
olol
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PhilinК сожалению вот так проверять не получается:
Код: plaintext
if (Cursor->FieldByName(aCursorFields[i])->OldValue != Cursor->FieldByName(aCursorFields[i])->NewValue)
потому что иногда значения OldValue и NewValue могут быть NULL... и получаем эксепшин Invalid Variant Operation.
А ты попробуй сравнивать значения ->AsString... (если сохранность NULL не нужна)
...
Рейтинг: 0 / 0
Как проверить изменилось ли поле в датасете?
    #32964767
olol
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор
Лично я CachedUpdates не пользуюсь...
У меня для каждого датасета есть свой TStringList в который я на BeforeEdit загоняю перечень всех критичных полей и их значения типа:
MyField=ValueAsString...
а после поста, если они изменились, для зависимых таблиц делаю:
if (MyTable->State == dsBrowse) MyTable->Refresh();
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Как проверить изменилось ли поле в датасете?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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