Страница 1 из 1

Ошибка добавления данных

Добавлено: 02 авг 2011, 10:02
niteo
Добрый день, возникает ошибка при попытке добавить данные в таблицу:

Код: Выделить всё

Ошибка 5
Дублированное значение при уникальном ключе 
в таблице SERVLEN
Уникальный индекс SERVLEN0
Поле FNREC Comp(8): 0x251....3001 Таблица N2512
Продолжить редактирование
Да / Нет
Жму ДА
Дальше говорит, что снова дублирование ключа.
Вообщем смысл понятен, дублируется ключ, но как тогда добавить данные в таблицу из своего интерфейса?
Вот код:

Код: Выделить всё

            if (getfirst servlen where ((persons.nrec == servlen.person and 000000000000008Ah == servlen.position)) = tsOk)
            {
                servlen.nrec := lastnrec + i;
                servlen.position := 130000000004BA0h;
                insert current servlen;
            }                
Цель: необходимо добавить человеку новый стаж.

Re: Ошибка добавления данных

Добавлено: 02 авг 2011, 10:19
n0where

Код: Выделить всё

            if (getfirst servlen where ((persons.nrec == servlen.person and 000000000000008Ah == servlen.position)) = tsOk)
            {
                servlen.nrec := 0;
                servlen.position := 130000000004BA0h;
                insert current servlen;
            }
Если надо nRec новый то 0 ставте.

Re: Ошибка добавления данных

Добавлено: 02 авг 2011, 10:49
niteo
n0where писал(а): Если надо nRec новый то 0 ставте.
Спасибо, помогло =)

Re: Ошибка добавления данных

Добавлено: 02 авг 2011, 12:38
Masygreen
еще неплохо бы

Код: Выделить всё

clearbuffer(#servlen);

Re: Ошибка добавления данных

Добавлено: 02 авг 2011, 12:53
n0where
Masygreen
Предполагаю, что им копирование нужно.

Re: Ошибка добавления данных

Добавлено: 02 авг 2011, 15:03
Semi-bit
Masygreen писал(а):еще неплохо бы

Код: Выделить всё

clearbuffer(#servlen);
а затем

Код: Выделить всё

servlen.buffer := servlen_old.buffer;
servlen.nrec := 0;
несмотря на кажущуюся нелепость, в циклах помогает :)

Re: Ошибка добавления данных

Добавлено: 02 авг 2011, 16:01
n0where
Semi-bit
А нафиг синоним делать?

Re: Ошибка добавления данных

Добавлено: 04 авг 2011, 08:56
Semi-bit
n0where
Стояла задача создать акт из ДО. Дополнительные данные, такие, как внешние атрибуты, ttndoc, внешние атрибуты к ttndoc, получалось скопировать, заменив их привязку. Без синонимов как-то сложновато выходило.
В любом случае, когда значение одного поля требуется перманентно, проще на его таблицу завести синоним, чем постоянно переходить туда-сюда (после инсерта поля в буфере принимают вставленные значения).

Re: Ошибка добавления данных

Добавлено: 04 авг 2011, 09:29
n0where
Semi-bit
Просто читал гдето что не рекомендуется пользоваться синонимами, т.к. они жёстко тормозят запрос.
С другой стороны я не понимаю зачем юзать синоним, если надо изменить привязку к полю таблицы источника nRec только, сохранил в переменную оригинальный nRec и вперёд меняем ))

В любом случае каждый решает по своему )

Re: Ошибка добавления данных

Добавлено: 04 авг 2011, 12:30
Vik
n0where писал(а):Просто читал гдето что не рекомендуется пользоваться синонимами, т.к. они жёстко тормозят запрос.
А где читали, не вспомните? Что-то не замечал ни разу каких-либо тормозов из-за синонимов.

Re: Ошибка добавления данных

Добавлено: 04 авг 2011, 14:32
Semi-bit
Vik писал(а):
n0where писал(а):Просто читал гдето что не рекомендуется пользоваться синонимами, т.к. они жёстко тормозят запрос.
А где читали, не вспомните? Что-то не замечал ни разу каких-либо тормозов из-за синонимов.
Возможно, тормозили они из-за ошибок в проектировании вьюхи, либо в ранних версиях Атлантиса.
Имхо, действительно необходимо их использовать только тогда, когда необходима выборка данных по другому индексу, причём одновременная (иначе баунды бы помогли).
С другой стороны, использование переменных и баундов не всегда является красивым решением. Зачастую пользоваться синонимами удобнее. Иначе можно свихнуться, придумывая название для 100500-й (не только nRec менять пришлось) переменной, а потом (в силу отсутствия подстановки) их перепутать и свихнуться снова, отлаживая получившееся безобразие.
В любом случае, со временем актуальность информации меняется. "На глазок" я разницы в быстродействии не замечал.