Подскажите, пожалуйста, как в функции SaveChanges, а точнее в BaseDBEdit.Dataset.Post() определяется набор полей которые надо обновить? Почему-то измененное поле сохраняется не всегда...
"AlexLS" написал:как...определяется набор полей которые надо обновить
никак. Поля, которые Enabled в датасете, сохраняются в БД. Конечно, если поля корректно настроены и для них нормально формируется элемент в selectQuery. Например, если поле получается подзапросом, его изменения просто так не сохранятся.
"AlexLS" написал:Почему-то измененное поле сохраняется не всегда...
когда сохраняется, а когда - нет?
А другие поля сохраняются, когда это не сохраняется?
Проверьте профайлером, идет ли у вас апдейт таблицы в тех случаях, когда не сохраняется.
"AlexLS" написал:Почему-то измененное поле сохраняется не всегда...
Александр, это же подход менеджера, но не разработчика :)
Профайлер в руки и упорным анализом логов познаем закономерность.
Кстати эффект "не сохраняется" может быть из-за криво написанных обработчиков событий на датасете или карточке - типа смены значений полей при изменении других... смены не видно глазами, а она фоном происходит в датасете, ну и при сохранении уже в таблицы попадает
"Андросов Дмитрий" написал:когда сохраняется, а когда - нет?
Дмитрий, спасибо за ответ! Пытаюсь сообразить, но пока понял что при инсерте сохраняется, а пр апдейте нет. Непосредственно перед постом, в [javascript]
function SaveChanges(BaseDBEdit, Window) {
...
var PostResult = BaseDBEdit.Dataset.Post();
...
[/javascript], значения следующие:
[javascript]
Dataset.DataFields('PhoneNumber').IsReadOnly = false;
Dataset.DataFields('PhoneNumber').ValueIsChanged = true;
Dataset.DataFields('PhoneNumber').IsEnabled = true;
Dataset.SelectQuery.Columns.ItemsByAlias('PhoneNumber').IsEnabled = true;
[/javascript]
Что-то еще забыл указать? (да, сразу после поста значения НЕ изменились!)
"Безродный Андрей" написал:Прошу уточнить, какое у Вас состояние датасета перед "постом":
Состояние где "надёжнее" проверить? В "OnDatasetBeforePost" датасета или в скрипте карточки в "dlDataOnDatasetBeforePost" (аналогичный вопрос с after)?
Под пользователем ограниченным выполняем изменение? Судя по wv_SCall
Советую посмотреть триггер tr_vw_SCall_IU (где-то так должен называться) на этой вьюшке, который отвечает за update непосредственно таблицы, по результату update вьюхи. Там с этим полем PhoneNumber все в порядке - может пропущено оно где в запросах?
посмотрел[sql] [dbo].[tr_vw_SCall_IU] [/sql]
есть строка [sql] [P].[PhoneNumber] = [I].[PhoneNumber], [/sql]
у меня мысли были что из-за того что поле где-то принимает [javascript] IsReadOnly = true [/javascript] (а я меняю это значение если вставка необходима), может как-то влияет на строящийся запрос вставки, но как это подтвердить не знаю и как поправить тоже не понимаю...
Если она не стоит и поле нигде не отображается, оно не попадает в запрос. По аналогии можно предположить (я не знаю как на самом деле), что если поле при создании экземпляра датасета имеет свойство Только на чтение, оно не попадает в автоматически формируемый UpdateQuery. Т.к. UpdateQuery формируется на основе SelectQuery, можно предположить, что эта галочка добавит поле в апдейт, игнорируя признак Только на чтение. Попробуйте)
Правильно ли я понял, что в самом датасете (сервисе) у вас стоит свойство Только на чтение для этого поля, а потом в скрипте вы его меняете? Если так, то попробуйте установить его в False, а потом в скрипте менять по необходимости.
А я бы предложил вообще без всяких хитрых изменений попробовать в совершенно отвлеченном месте получить экземпляр этого датасета, отключить ему эвенты и попробовать сделать Open(), Edit(), потом поменять значение поля нужного и Post(). Потом посмотреть все ли поменялось. Если ок, искать причины в том месте, где возникает проблема - карточка, события на датасете и т.д
"Андросов Дмитрий" написал:Правильно ли я понял, что в самом датасете (сервисе) у вас стоит свойство Только на чтение для этого поля, а потом в скрипте вы его меняете?
Дмитрий, спасибо! В датасете галка не стоит, а устанавливается в true на OnPrepare, затем на кнопке OK на всякий случай меняю это свойство на false.
"Александр Кудряшов" написал:Потом посмотреть все ли поменялось
Александр, спасибо! Видимо так и придется пробовать!