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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 06.05.2008, 07:53   #1  
smoyk is offline
smoyk
Участник
 
188 / 13 (1) ++
Регистрация: 20.04.2007
Здравствуйте.
Имею ошибку при добавлении записи "Запись уже существует... бла-бла-бла")
Первичный ключ - поле id, автоинкрементное, я так понимаю должно увеличиваться, но почемуто этого не происходит и на него ругань идет.
Код:
  WITH ILRec DO BEGIN
	  INIT;
	  VALIDATE(id);
	  idIH := Rec.id;
	  ItemCode := adoRec1.Fields.Item(0).Value;
	  UnitPrise:= adoRec1.Fields.Item(1).Value;
	  CountDoc := adoRec1.Fields.Item(2).Value;
	  SumDoc   := adoRec1.Fields.Item(3).Value;
	  INSERT(TRUE);
  END;
Подскажите, в чем причина может быть?
Старый 06.05.2008, 09:00   #2  
DA_NEAL is offline
DA_NEAL
Участник
Аватар для DA_NEAL
Лучший по профессии 2017
Лучший по профессии 2009
 
788 / 54 (3) ++++
Регистрация: 05.08.2002
Адрес: Королев
Не надо валидейтить поле ID. И присваивать его не нужно. Оставьте пустым.
__________________
Want to believe...
Старый 06.05.2008, 09:06   #3  
smoyk is offline
smoyk
Участник
 
188 / 13 (1) ++
Регистрация: 20.04.2007
Так тоже делал(
Старый 06.05.2008, 09:16   #4  
Шрэк is offline
Шрэк
Участник
Аватар для Шрэк
 
645 / 24 (2) +++
Регистрация: 09.02.2004
Адрес: Москва
Напишите так:

Код:
  WITH ILRec DO BEGIN
	  INIT;
	  id := 0;
	  idIH := Rec.id;
	  ItemCode := adoRec1.Fields.Item(0).Value;
	  UnitPrise:= adoRec1.Fields.Item(1).Value;
	  CountDoc := adoRec1.Fields.Item(2).Value;
	  SumDoc   := adoRec1.Fields.Item(3).Value;
	  INSERT(TRUE);
  END;
То есть, полю id присвойте 0 перед вставкой.
__________________
MBS Certified Master in Navision Developer
Старый 06.05.2008, 10:06   #5  
smoyk is offline
smoyk
Участник
 
188 / 13 (1) ++
Регистрация: 20.04.2007
Только что я еще раз попробовал оба варианта. Безрезультатно.
Старый 06.05.2008, 10:19   #6  
Шрэк is offline
Шрэк
Участник
Аватар для Шрэк
 
645 / 24 (2) +++
Регистрация: 09.02.2004
Адрес: Москва
Цитата:
Сообщение от smoyk Посмотреть сообщение
Только что я еще раз попробовал оба варианта. Безрезультатно.
Есть ряд ограничений, накладываемых по использованию свойства поля AutoIncrement. Смысла описывать их здесь нет - лучше посмотреть справку по данному свойству. И понять выполнены ли все условия.
Возможно, что проблема в обработке триггера Insert.
__________________
MBS Certified Master in Navision Developer
Старый 06.05.2008, 10:33   #7  
apanko is offline
apanko
MCTS
MCBMSS
Лучший по профессии 2009
 
1,164 / 139 (7) +++++
Регистрация: 24.02.2005
Табличка случайно не временная?
Старый 06.05.2008, 12:42   #8  
RedFox is offline
RedFox
Участник
 
1,441 / 10 (0) +
Регистрация: 28.12.2004
Адрес: Киев
Цитата:
Сообщение от smoyk Посмотреть сообщение
Здравствуйте.
Имею ошибку при добавлении записи "Запись уже существует... бла-бла-бла")
Первичный ключ - поле id, автоинкрементное, я так понимаю должно увеличиваться, но почемуто этого не происходит и на него ругань идет.
Код:
  WITH ILRec DO BEGIN
	  INIT;
	  VALIDATE(id);
	  idIH := Rec.id;
	  ItemCode := adoRec1.Fields.Item(0).Value;
	  UnitPrise:= adoRec1.Fields.Item(1).Value;
	  CountDoc := adoRec1.Fields.Item(2).Value;
	  SumDoc   := adoRec1.Fields.Item(3).Value;
	  INSERT(TRUE);
  END;
Подскажите, в чем причина может быть?
Вы уверены, что id не часть первичного ключа? Какой ключик первичный?
Старый 06.05.2008, 13:48   #9  
Fordewind is offline
Fordewind
Участник
 
1,134 / 10 (3) +
Регистрация: 01.12.2005
Цитата:
Сообщение от RedFox Посмотреть сообщение
Вы уверены, что id не часть первичного ключа? Какой ключик первичный?
Что значит не часть? Должно быть частью! Более того, последним полем в первичном ключе...
Старый 06.05.2008, 14:41   #10  
romeo is offline
romeo
Участник
Аватар для romeo
 
564 / 10 (2) +
Регистрация: 31.03.2004
Посмотрите в тексте сообщения об ошибке какая именно запись уже существует (с каким значением id)? Откройте таблицу и проверьте, что этот id является очередным (тем что должен быть на 1 больше максимального). Проверьте, что поле id действительно автоинкремент. Остановите дебагер на строке INSERT и посмотрите, с какими значениями первичного ключа вы пытаетесь вставить запись. Это даст ответ на вопрос почему она не вставляется.
Старый 06.05.2008, 17:05   #11  
RedFox is offline
RedFox
Участник
 
1,441 / 10 (0) +
Регистрация: 28.12.2004
Адрес: Киев
Цитата:
Сообщение от Fordewind Посмотреть сообщение
Что значит не часть? Должно быть частью! Более того, последним полем в первичном ключе...
Вот именно!
Но здась оказывается другая еунда - при созданном объекте можно вставить только 1 строку. Если нужно ставить другую, то нужно создавать либо копию этого же объекта, либо его закрывать и запускать заново.
Наверное это баг, так как есть - не очень удобно манипулировать данными таким образом.
Старый 06.05.2008, 18:06   #12  
Fordewind is offline
Fordewind
Участник
 
1,134 / 10 (3) +
Регистрация: 01.12.2005
Цитата:
Сообщение от RedFox Посмотреть сообщение
Вот именно!
Но здась оказывается другая еунда - при созданном объекте можно вставить только 1 строку. Если нужно ставить другую, то нужно создавать либо копию этого же объекта, либо его закрывать и запускать заново.
Наверное это баг, так как есть - не очень удобно манипулировать данными таким образом.
CLEAR в руки и вперед .
Про баг, в общем-то, согласен
Старый 06.05.2008, 17:50   #13  
DA_NEAL is offline
DA_NEAL
Участник
Аватар для DA_NEAL
Лучший по профессии 2017
Лучший по профессии 2009
 
788 / 54 (3) ++++
Регистрация: 05.08.2002
Адрес: Королев
Точно... вспомнил ... это поле нормально работает при пользовательском вводе, при вставке из кода проблемы .
__________________
Want to believe...
Старый 06.05.2008, 17:53   #14  
romeo is offline
romeo
Участник
Аватар для romeo
 
564 / 10 (2) +
Регистрация: 31.03.2004
Цитата:
Сообщение от DA_NEAL Посмотреть сообщение
Точно... вспомнил ... это поле нормально работает при пользовательском вводе, при вставке из кода проблемы .
Хм. Не замечал такого.
Старый 06.05.2008, 18:21   #15  
SVG is offline
SVG
Участник
 
201 / 10 (1) +
Регистрация: 15.11.2004
только что
создал таблицу с одним полем AutoKey типа integer, инкремент = true
написал в кодеюните
FOR i := 1 TO 10 DO BEGIN
Table.AutoKey := 0;
Table.INSERT;
END;

все прекрасно работает.
автору надо посмотреть что у него в триггере insert написано
Старый 07.05.2008, 05:48   #16  
smoyk is offline
smoyk
Участник
 
188 / 13 (1) ++
Регистрация: 20.04.2007
Пробовал с CLEAR (такой баг мне известен), не помогало.
Таблица не временная.
id действительно инкремент.
Значения смотрел: id был равен значению id первой записи в НД (на таблице стоят фильтры, впрочем пробовал и без них). Значение просто не увеличивалось.
Все надоело, сделал через запрос на сервер
Код:
	cuSQL.Execute('INSERT INTO InventoryLine (idIH, ItemCode, UnitPrise, CountDoc, SumDoc) '+
				  'VALUES ('+
				  FORMAT(Rec.id)+','''+
				  DELCHR(FORMAT(adoRec1.Fields.Item(0).Value),'=',' ')+''','+
				  DELCHR(FORMAT(adoRec1.Fields.Item(1).Value),'=',' ')+','+
				  DELCHR(FORMAT(adoRec1.Fields.Item(2).Value),'=',' ')+','+
				  DELCHR(FORMAT(adoRec1.Fields.Item(3).Value),'=',' ')+')');
Работает. Всем спасибо за советы и помощ.

p.s. В тригере insert много чего написано, куда смотреть не знаю. Не могу понять, как то, что там написано могло бы помешать увеличению значения автоинкрементного поля. Впрочем, в navision все возможно)))
Старый 07.05.2008, 11:30   #17  
romeo is offline
romeo
Участник
Аватар для romeo
 
564 / 10 (2) +
Регистрация: 31.03.2004
На мой взгляд не очень хорошее решение принял, Smoyk. Если принять за правило писать логику в скуле, когда не понимаешь, что написано в навиженовском триггере ... Кончится все это плохо. Вас не интересует количество кода в триггере в данном случае. Вас интересует то, с каким значением в этом триггере присутствует одно поле таблицы.
Автоинкремент с момента создания или недавно переделали?
Обнулите айди перед вставкой как советовали и посмотрите как будет вставляться с нулем .. Хотя вы говорите, что так уже пробовали.
Старый 07.05.2008, 12:47   #18  
smoyk is offline
smoyk
Участник
 
188 / 13 (1) ++
Регистрация: 20.04.2007
Цитата:
Сообщение от romeo Посмотреть сообщение
На мой взгляд не очень хорошее решение принял, Smoyk. Если принять за правило писать логику в скуле, когда не понимаешь, что написано в навиженовском триггере ... Кончится все это плохо.
Признаю, что Вы правы) Надо копать.
Автоинкремент стоит с самого начала, хотя ключи пару раз перестраивались в поисках оптимального решения. Но не думаю, что в этом дело т.к. сервер обрабатывает эту ситуацию нормально.
На сервере свойства поля
Код:
Identity=Yes;
Identity Seed=1;
Identity Increment=1;
Можно конечно и ручками увеличивать, но изначально идея в том, чтобы этого то как раз и не делать))
Может это быть из-за того, что первичный ключ составной? Сейчас попробуем в этом направлении покопать.
Старый 07.05.2008, 12:54   #19  
RedFox is offline
RedFox
Участник
 
1,441 / 10 (0) +
Регистрация: 28.12.2004
Адрес: Киев
Цитата:
Сообщение от smoyk Посмотреть сообщение
Признаю, что Вы правы) Надо копать.
Автоинкремент стоит с самого начала, хотя ключи пару раз перестраивались в поисках оптимального решения. Но не думаю, что в этом дело т.к. сервер обрабатывает эту ситуацию нормально.
If you want to insert a record, you must make sure that the value in the field is blank before you insert the record. This is even more critical when you are using the SQL Server Option.
Старый 07.05.2008, 12:57   #20  
romeo is offline
romeo
Участник
Аватар для romeo
 
564 / 10 (2) +
Регистрация: 31.03.2004
Цитата:
Сообщение от smoyk Посмотреть сообщение
Может это быть из-за того, что первичный ключ составной? Сейчас попробуем в этом направлении покопать.
Итак. Сначала была таблица с первичным ключом из одного поля id, которое было автоинкремент.
Прошло время.
Ключ расширили. Поле id, входящее по-прежнему, в его состав осталось автоинкрементом.
Зачем расширили первичный ключ?
Зачем оставили поле автоинкрементом, если надобность расширять ключ обоснована?
 

Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 17:48.