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

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

Ответить
niteo
Постоянный обитатель
Сообщения: 151
Зарегистрирован: 17 сен 2009, 11:39
Контактная информация:

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

Сообщение 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;
            }                
Цель: необходимо добавить человеку новый стаж.
n0where
Местный житель
Сообщения: 499
Зарегистрирован: 30 дек 2010, 08:16

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

Сообщение 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 ставте.
хороший программист — это человек, который переходя улицу с односторонним движением смотрит в обе стороны
niteo
Постоянный обитатель
Сообщения: 151
Зарегистрирован: 17 сен 2009, 11:39
Контактная информация:

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

Сообщение niteo »

n0where писал(а): Если надо nRec новый то 0 ставте.
Спасибо, помогло =)
Masygreen
Местный житель
Сообщения: 1089
Зарегистрирован: 04 сен 2008, 11:27
Откуда: Москва
Контактная информация:

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

Сообщение Masygreen »

еще неплохо бы

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

clearbuffer(#servlen);
Время ведет!
n0where
Местный житель
Сообщения: 499
Зарегистрирован: 30 дек 2010, 08:16

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

Сообщение n0where »

Masygreen
Предполагаю, что им копирование нужно.
хороший программист — это человек, который переходя улицу с односторонним движением смотрит в обе стороны
Semi-bit
Постоянный обитатель
Сообщения: 123
Зарегистрирован: 01 фев 2007, 12:45
Откуда: Магнитогорск
Контактная информация:

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

Сообщение Semi-bit »

Masygreen писал(а):еще неплохо бы

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

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

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

servlen.buffer := servlen_old.buffer;
servlen.nrec := 0;
несмотря на кажущуюся нелепость, в циклах помогает :)
Испытываю траблы с даблами
ВИП — Велосипедо-Изобретательская Парадигма
САППОРТ — Сборище Абсолютно Пустых Посредственно Образованных Ржущих Троллей
n0where
Местный житель
Сообщения: 499
Зарегистрирован: 30 дек 2010, 08:16

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

Сообщение n0where »

Semi-bit
А нафиг синоним делать?
хороший программист — это человек, который переходя улицу с односторонним движением смотрит в обе стороны
Semi-bit
Постоянный обитатель
Сообщения: 123
Зарегистрирован: 01 фев 2007, 12:45
Откуда: Магнитогорск
Контактная информация:

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

Сообщение Semi-bit »

n0where
Стояла задача создать акт из ДО. Дополнительные данные, такие, как внешние атрибуты, ttndoc, внешние атрибуты к ttndoc, получалось скопировать, заменив их привязку. Без синонимов как-то сложновато выходило.
В любом случае, когда значение одного поля требуется перманентно, проще на его таблицу завести синоним, чем постоянно переходить туда-сюда (после инсерта поля в буфере принимают вставленные значения).
Испытываю траблы с даблами
ВИП — Велосипедо-Изобретательская Парадигма
САППОРТ — Сборище Абсолютно Пустых Посредственно Образованных Ржущих Троллей
n0where
Местный житель
Сообщения: 499
Зарегистрирован: 30 дек 2010, 08:16

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

Сообщение n0where »

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

В любом случае каждый решает по своему )
хороший программист — это человек, который переходя улицу с односторонним движением смотрит в обе стороны
Vik
Местный житель
Сообщения: 370
Зарегистрирован: 28 сен 2006, 15:43
Откуда: Санкт-Петербург
Контактная информация:

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

Сообщение Vik »

n0where писал(а):Просто читал гдето что не рекомендуется пользоваться синонимами, т.к. они жёстко тормозят запрос.
А где читали, не вспомните? Что-то не замечал ни разу каких-либо тормозов из-за синонимов.
Semi-bit
Постоянный обитатель
Сообщения: 123
Зарегистрирован: 01 фев 2007, 12:45
Откуда: Магнитогорск
Контактная информация:

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

Сообщение Semi-bit »

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