Обновление полей??

Добрый день! столкнулся с такой проблемой что если в сервисе Dataset при редактировании записи не присваивать значения всем полям определенным в датасете то они становятся значения null. почему так происходит? так же если в сервисе UpdateQuery создать две колонки и в скрипте передать значения только одной колонке то вторая обнулит значение в столбце в котором не значение не передавалось. просто есть задачи в которых нужно поменять значение одного поля и приходится создавать для каждого поля свой сервис??

Нравится

7 комментариев

Иван, что касается сервиса UpdateQuery - это вполне предсказуемое поведение, так как при его выполнении формируется запрос вида:

update tbl_...
set Field1 = ...,
Field2 = ...,
...
where ...

При этом в сервисе нет возможности изменять (включать/отключать) набор колонок, следовательно, обновляться будет весь набор (в том числе и те, значения для которых не установлены).

Что касается варианта с использованием датасета, безусловно, это неправильное поведение. В связи с этим прошу уточнить, какую версию Вы используете? Можете привести пример кода обновления значения в датасете?

Попробуйте также вариант с отключением всех полей датасета, кроме тех, которые обновляются. Например, перед открытием датасета выполняем DisableAllColumns, потом EnableColumn для полей, которые необходимо обновить, применяем нужные фильтры и только после этого
открываем датасет.

Спасибо Олег попробую! Сейчас уже не вспомню в каком скрипте была проблема просто возникла такая потребность обновить значения и я вспомнил что датасет у меня обнулял значения. Версия бинарников 3.3.1

Это происходит только в администраторе. Т.е. если я запускаю скрипт по F9 и делаю изменения в датасете и при этом данные не меняются (т.е. например поле "Code" было '123' и я присваиваю ему значение '123') то всем полям присваивается значение null. Это тянется с версии 3.0.4 и до текущей версии.

Евгений, на самом деле результат выполнения кода в Администраторе через F9 может отличаться от результата выполнения в клиентском приложении. Практически каждый сервис в конфигурации Terrasoft может использоваться в двух режимах: в рабочем режиме и в режиме дизайна. В зависимости от режима они могут по-разному реагировать на действия, которые выполняются над ними.

Да, я в курсе про свойство IsDesignin. Но на датасет он не влияет, точнее на сбрасывание значений полей. У меня есть подозрения что это сделано для снижения трафика, но в администраторе я так и не смог добиться того чтобы значения не сбрасывались.

Необходимо признать, что при работе в Terrasoft Administrator объект DBDataset ведет себя несколько иначе, чем при работе в клиентском приложении, причем даже со снятым признаком IsDesigning. Terrasoft Administrator предназначен в первую очередь для дизайна и настройки сервисов. Проверять работу элементов системы рекомендуется с помощью запуска клиентского приложения.

Я с этим столкнулся когда писал инсталлер для почтового клиента. Можно было-бы сделать это и через клиентское приложение, но мне нужно было сохранять таблицы в БД, но это не во всех версиях работает. Поэтому было принято решение делать через администратор, а ситуацию со сбрасыванием значений в датасете обходить путем присваивания "левой" информации, а потом нужной.:smile: Это грубо и некрасиво, но работает.

Показать все комментарии