Ошибка в добавлении записи

Здравствуйте!
Возникла следующая ошибка:

есть таблица tbl_Brief с полями WCCitiesT и WCCitiesText с типом строкоа юникод (1500) и строка юникод (2500).
есть датасет ds_Brief с полями WCCitiesT и WCCitiesText с типом blob (когда эти поля были типа "строка", данные все равно обрезались).

Есть окно редактирования, в нем Lookup поле, в котором вызывается wnd_MultiSelectData. при нажатии ОК в этом окне происходит следующее:

if ((Sender.Name == 'wnd_MultiSelectData')
                  && (Sender.WindowCaption == "Выбор 'Город'")&& (Message == MSG_OK)) {                                
        CitiesIDString = Sender.Attributes('KeyValues').CommaText;
      Lookup.Text = Sender.Attributes('DisplayFieldValues').CommaText;
        Self.ComponentsByName('dlData').Dataset.Values('WCCitiesText') = Sender.Attributes('DisplayFieldValues').CommaText;
        var t = new String (Sender.Attributes('KeyValues').CommaText);
        Self.ComponentsByName('dlData').Dataset.Values('WCCitiesT') = CitiesIDString
                    }

Потом при нажатии ОК в окне редактирования по профайлеру видно, что добавляется запись с пустыми значениями этих полей (хотя BaseDBEdit.Dataset.Values('WCCitiesT') и BaseDBEdit.Dataset.Values('WCCitiesText') не пустые). При чем только при первом добавлении записи в грид за сеанс. Если потом открыть ту же запись или создать новую, то значения полей добавляются.

в чем может быть проблема?

Нравится

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

Здравствуйте.
Сложно сказать в чем может быть проблема. Не понятно почему у Вас обрезается строка, если конечно у Вас и в таблице в и датасете длина поля типа nvarchar установлена одинаковая (1500 b 2500 соответственно).
Можете предоставить резервную копию БД для анализа проблемы?

Да, длина строк была одинаковая. но сейчас проблема не в этом, а в том, что при первой записи в датасет значения этих полей не сохраняются.

а смотрели события самого датасета? после выделенной строки как раз и срабатывает beforepost датасета (и потом afterpost)

эти события стандартные.

Елена, подозреваю, что Дмитрий имел ввиду, что следует проверить события BeforePost и AfterPost для этого датасета в скрипте самого датасета и в скрипте карточки. Возможно в функциях обработчиках этих событий есть какая либо логика, которая в первый раз (для новой записи) очищает значение этих полей в датасете.

я поняла. Я имела ввиду, что в скрипте датасета нет нестандартных функций на это событие, как и в карточке.

Лена, в таком случае нужно смотреть реализацию.
Без отладки и анализа реализации сложно определить причину. Вложите, пожалуйста, сервисы функциональности либо направьте в службу технической поддержки резервную копию БД.

Оказалось, что если типа поля датасета поменять на строковый вместо blob, то всё сохраняется с перовго раза.

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