Странное поведение UpdateQuery

Доброго времени суток.
Столкнулся со следующей проблемой.
Есть простенький UpdateQuery, вида:

UPDATE MyTable
SET ContactID = :contactID
WHERE ID = :ID

выполняю его так:
var UQ = Services.GetNewItemByUSI('uq_MyUQ');
UQ.Parameters.ItemsByName('ID').Value = ID;
UQ.Parameters.ItemsByName('ContactID').Value = Value;
return UQ.Execute(); // вот тут возникает ошибка

Ошибка говорит, мол не могу вставить ИД контакта, так как такого контакта нет. Причем Value == null.
При отладки перед UQ.Execute(); UQ.Parameters.ItemsByName('ContactID').Value == null
а когда срабатывает само выполнение - то возникает ошибка и значение ContactID далеко не null(какойто guid). я даже не представляю от куда оно берется.

Подскажите, с чем может быть такое поведение.

Нравится

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

А какой запрос? Connector.DBEngine.GetSelectQuerySQLText(SelectQuery)
Кстати версия тоже наверное имеет значение.

"Глова Сергей" написал:Connector.DBEngine.GetSelectQuerySQLText(SelectQuery)

ну ето не подойдет, наверное. У меня же UpdateQuery

Вот такая вот штука, говорит следующие:
Connector.DBEngine.GetUpdateQuerySQLText(UQ) == ''
Тут не знаю почему. Может что с методом GetUpdateQuerySQLText.
Профайлер показывает запрос как будто я в поле ContactID вставляю не null, а какой-то ID. Что и вызывает ошибку.

Версия: 3.2.2.3

Может так попробовать:

var UQ = Services.GetNewItemByUSI('uq_MyUQ');
UQ.Parameters.ItemsByName('ID').Value = ID;
UQ.ColumnsValues.ItemsByName('ContactID').Value = Value;
return UQ.Execute(); 

Валерий скорее всего прав - в scr_AccountAddress есть примеры ...

Вобщем поясню что происходит.
Вначале этот uq_ выполняется для Value == некоему ID контакта. И он отрабатывает корректно.
Кода в параметр входит null - вместо null на сервер уходит запрос с непонятным ID.

Валерий Андрусик, попробовал ваш вариант.
Тут не работает в двух случаях.
Неважно что я вставляю в UQ.ColumnsValues.ItemsByName('ContactID').Value запрос уходит совершенно с другими ID ....

Давайте для начала определимся, как выглядит запрос и как Вы его вызываете :)

Потому что должно быть либо так:

UPDATE MyTable 
SET ContactID = :contactID
WHERE ID = :ID
var UQ = Services.GetNewItemByUSI('uq_MyUQ');
UQ.ColumnsValues.ItemsByName('ContactID').Value = Value;
UQ.Parameters.ItemsByName('ID').Value = ID;
return UQ.Execute();

Либо так:

UPDATE MyTable 
SET <что-то>
WHERE ID = :ID
  AND ContactID = :contactID
var UQ = Services.GetNewItemByUSI('uq_MyUQ');
UQ.Parameters.ItemsByName('ID').Value = ID;
UQ.Parameters.ItemsByName('ContactID').Value = Value;
return UQ.Execute();

Валерий Андрусик, запрос выглядит как ваш первый вариант... как и в моем первом посте.

Разобрался.
По невнимательности для поля ContactID тип был "Идентификатор". Поставил "Уникальный идентификатор" - все работает.
Просто для полей типа "Идентификатор" при значении null автоматом выполняется newid() ... от сюда и непонятный ID.
Вобщем, всем спасибо )

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