Доброго времени суток.
Столкнулся со следующей проблемой.
Есть простенький UpdateQuery, вида:
SET ContactID = :contactID
WHERE ID = :ID
выполняю его так:
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). я даже не представляю от куда оно берется.
Подскажите, с чем может быть такое поведение.
Нравится
А какой запрос? 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.
Вобщем, всем спасибо )