|
![]() |
#1 |
Administrator
|
Вообще говоря, Вы делаете лишнее действие, вставляя пустую запись. Перенесите insert на то место, где у Вас стоит update, а update удалите:
X++: . . . . . . while select iTable { iLocation.ItemId = iTable.ItemId; iLocation.insert(); } . . . . . . Ваша ошибка возникает в том случае, когда на таблице определен индекс, не позволяющий повторы (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 |
|