Показать сообщение отдельно
Старый 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