AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
DAX
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 14.12.2001, 14:41   #1  
Андре is offline
Андре
Moderator
Сотрудники компании GMCS
 
2,375 / 464 (20) +++++++
Регистрация: 03.12.2001
Заполнение таблицы из кода программы
У меня есть 2 таблицы: одна заполненная, другая пустая. Необходимо заполнить одно поле пустой таблицы из заполненной. Не могли бы Вы подсказать, как это лучше сделать ?
Я пробовал так:
X++:
void clicked()
{
   InventTable iTable;
   InventItemLocation iLocation;
   str s;
   
   while select iTable
   {
      s=iTable.ItemId;

      iLocation.insert();
      iLocation.ItemId=s;
      iLocation.update();
      print s;
   }
   super();
}
При запуске переносится только первая запись, а дальше Аксапта говорит, что следующую запись вставить невозможно, так такая уже существует. Хотя из (print s); видно что значение поля другое.

Не могли бы Вы подсказать в чем дело ?

Спасибо.
Старый 14.12.2001, 14:58   #2  
PlasticinE is offline
PlasticinE
Смотрящий поверх деревьев (Варварский отморозок)
 
243 / 10 (1) +
Регистрация: 06.12.2001
<Зохавано мудератором>
за неуплату
__________________
It's a dirty job, but someone's got to do it. So?
Старый 15.12.2001, 00:42   #3  
Maxim Gorbunov is offline
Maxim Gorbunov
Administrator
Соотечественники
Лучший по профессии 2009
 
2,483 / 645 (26) +++++++
Регистрация: 27.11.2001
Адрес: Dubai, UAE
Вообще говоря, Вы делаете лишнее действие, вставляя пустую запись. Перенесите insert на то место, где у Вас стоит update, а update удалите:
X++:
    . . . . . .
    while select iTable 
    {
        iLocation.ItemId = iTable.ItemId;
        iLocation.insert();
    }
    . . . . . .
Переменная типа таблицы имеет смысл буфера. Вы заполняете ее поля, а методы insert и update переносят значение этого буфера в таблицу.

Ваша ошибка возникает в том случае, когда на таблице определен индекс, не позволяющий повторы (Allow Duplicates равно No). Вставляя пустую запись, Вы автоматически создаете такой повтор.

Однако, ошибка может быть вызвана и тем, что, как уже писал PlasticinE, заполнены не Все поля записи. Опять же, если одно из незаполненных полей входило в индекс, который не позволял повторов, Вы получите ту же самую ошибку. Чтобы сократить вероятность появления таких ситуаций, в некоторых таблицах переопределен метод initValue. Этот метод обычно заполняет некоторые поля таблицы (если быть точным, то буфера), среди которых и те, которые входят в индексы, причем они заполняются так, чтобы избежать повторов. initValue рекомендуется вставлять непосредственно перед тем, как Вы начинаете заполнять поля:
X++:
    . . . . . .
    while select iTable
    {
        iLocation.initValue();
        iLocation.ItemId = iTable.ItemId;
        iLocation.insert();
    }
    . . . . . .
__________________
Not registered yet? Register here!
Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Пересоздание таблицы при синхронизации Serg16 DAX: Администрирование 1 26.08.2009 13:55
Получение кода таблицы Arahnid DAX: Программирование 2 10.05.2007 11:43
Получение из поля Map кода поля реальной таблицы, к ней привязанной (Mappings) vey DAX: Функционал 5 16.03.2005 11:16
Имитация связи между таблицами из кода программы Андре DAX: Программирование 3 31.01.2002 11:00
Программное заполнение ComboBox из таблицы PlasticinE DAX: Программирование 3 08.12.2001 03:16
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 13:35.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.