Добрый день! столкнулся с такой проблемой что если в сервисе Dataset при редактировании записи не присваивать значения всем полям определенным в датасете то они становятся значения null. почему так происходит? так же если в сервисе UpdateQuery создать две колонки и в скрипте передать значения только одной колонке то вторая обнулит значение в столбце в котором не значение не передавалось. просто есть задачи в которых нужно поменять значение одного поля и приходится создавать для каждого поля свой сервис??
Нравится
Иван, что касается сервиса 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: Это грубо и некрасиво, но работает.