AppendRecord

ЧАстые Вопросы и Ответы

Модераторы: kdv, CyberMax

Ответить
ndStar
Сообщения: 16
Зарегистрирован: 25 окт 2005, 17:53

AppendRecord

Сообщение ndStar » 10 ноя 2005, 16:26

:( Вопрос такой, после получения значения генератора

{Ch - TpFIBDataSet
GEN_Ch_ID - генератор на 1е ключевое поле с именем Cnt }

i:=FIBDb.Gen_Id('GEN_Ch_ID',1,TrR);

Делаю

Ch.AppendRecord([i,sch,rc,ag,AgentGor.AsString,Now,0,0,0,sn,false,3,0,1]);

{Параметров много, посему уж больно не хочется писать
Ch.Append;
...
...
Ch.Post;}

Так вот при этом появляется ошибка: "Не верное значение поля Cnt"

Что я делаю не так? Помогите плиз.

С уважением, Надежда

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 10 ноя 2005, 17:10

ошибку прямо так и пишет, по русски? и значение генератора абсолютно точно увеличивается? и в таблице нет записей с таким же значением i ? И i - это первичный ключ таблицы?

ndStar
Сообщения: 16
Зарегистрирован: 25 окт 2005, 17:53

Сообщение ndStar » 11 ноя 2005, 09:35

Нет, пишет по аглицки, значение увеличивается, и в таблице нет записей с таким же значением, и это первичный ключ таблицы.
Вот это и огорчает

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 11 ноя 2005, 11:52

что пишет-то? я умоляю, никогда не пишите "не работает", "не хочет", и не пытайтесь делать вольный перевод сообщений об ошибках. Всегда указывайте точное сообщение об ошибке, если хотите чтобы вам помогли.

ndStar
Сообщения: 16
Зарегистрирован: 25 окт 2005, 17:53

AppendRecord

Сообщение ndStar » 11 ноя 2005, 12:53

Пишет

Invalud value for field 'Cnt'

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 11 ноя 2005, 14:21

тип переменной i и тип столбца ?

ndStar
Сообщения: 16
Зарегистрирован: 25 окт 2005, 17:53

Сообщение ndStar » 11 ноя 2005, 14:23

Проблема с первым Append решилась. Похоже дело было не в Cnt, а в значениях других полей (часть действительно содержала некорректное значение). После исправления все вставляется прекрасно.
Но появился следующий затык. Есть 2 таблицы Ch (счета) и Zak (заказы), связанные в клиенте через Master-Datail, а на сервере определен внешний ключ ZakCh

Ch.Cnt = Zak.Chet
(не уникальный, т.к. на один счет может быть несколько заказов)

У таблички Zak ПК определен по первым 2м полям Chet и Zak.

После вставки записи в Ch, хочется вставить соотв. запись в Zak. На момент записи значение Ch.Cnt=1001, а Zak.Chet=0, это наверное правильно, т.к. записей в Zak еще нет. Пытаемся

Zak.Last; j:=ZakZak.AsInteger+1; // j=1
Zak.AppendRecord([ChCnt.AsInteger,j,sg,sz,tp,'y',zp,zec,kl,1,tf,r,zei,rbs,'',pz,tn,znes,Now,Dgen.GenFl.AsInteger,TipnmTad.AsInteger,0]);

Выдает ошибку

raised exception class EFIBInterBaseError with message 'Zak.Insert.Query: Unsucsessfull execution caused by system error that does not preclude sucsessfull execution of subsequent statments,lock conflict on nowait transactions.
violation of FOREIGN KEY constraint "ZakCh" on table "Zak".

Понимаю, что что-то неправильно делаю. Но вот что? Буду очень благодарна за помощь.

С уважением, Надежда

pH
Сообщения: 10
Зарегистрирован: 09 ноя 2005, 13:43

Сообщение pH » 11 ноя 2005, 16:09

ndStar писал(а): Zak.Last; j:=ZakZak.AsInteger+1; // j=1
НИКОГДА !! так больше не делайте ....
Инче будете иметь БОЛЬШИЕ проблемы при паралельной работе пользователей над одной таблицей ...

На правильное использование можно
посмотреть в примерах по FibPlus .

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 11 ноя 2005, 17:41

violation of FOREIGN KEY constraint "ZakCh" on table "Zak".
бог ты мой, купите книжку Ковязина "Мир InterBase", что ли, ну нельзя же так. Сообщение гласит - нарушение внешнего ключа, таблицы где это происходит - указано. Как вы там вообще заполняете запись, которую вставляете?
И внемлите совету pH.
Zak.Last; j:=ZakZak.AsInteger+1; - это действительно УЖАСНО.

Ответить