AppendRecord
AppendRecord
Вопрос такой, после получения значения генератора
{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"
Что я делаю не так? Помогите плиз.
С уважением, Надежда
{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"
Что я делаю не так? Помогите плиз.
С уважением, Надежда
AppendRecord
Пишет
Invalud value for field 'Cnt'
Invalud value for field 'Cnt'
Проблема с первым 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".
Понимаю, что что-то неправильно делаю. Но вот что? Буду очень благодарна за помощь.
С уважением, Надежда
Но появился следующий затык. Есть 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".
Понимаю, что что-то неправильно делаю. Но вот что? Буду очень благодарна за помощь.
С уважением, Надежда
бог ты мой, купите книжку Ковязина "Мир InterBase", что ли, ну нельзя же так. Сообщение гласит - нарушение внешнего ключа, таблицы где это происходит - указано. Как вы там вообще заполняете запись, которую вставляете?violation of FOREIGN KEY constraint "ZakCh" on table "Zak".
И внемлите совету pH.
Zak.Last; j:=ZakZak.AsInteger+1; - это действительно УЖАСНО.