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

AppendRecord

Добавлено: 10 ноя 2005, 16:26
ndStar
:( Вопрос такой, после получения значения генератора

{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"

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

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

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

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

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

AppendRecord

Добавлено: 11 ноя 2005, 12:53
ndStar
Пишет

Invalud value for field 'Cnt'

Добавлено: 11 ноя 2005, 14:21
kdv
тип переменной i и тип столбца ?

Добавлено: 11 ноя 2005, 14:23
ndStar
Проблема с первым 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".

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

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

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

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

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