insert по условию

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

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

Ответить
VarankDA
Посетитель
Сообщения: 47
Зарегистрирован: 15 фев 2011, 12:00
Откуда: Киров, ЗАО "Красный якорь"
Контактная информация:

insert по условию

Сообщение VarankDA »

Подскажите криворукому!
Необходимо добавить записи в таблицу sys_mbf из стороннего файла при выполнении определенного условия;

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

 if fl_j=0
             begin
               _cex[j_eof]:=t1.lschet.cex;
               j_eof:=j_eof+1;
               _mnrec:=_mnrec+1;
               insert
                 sys_mbf
               set
                 mnrec:=_mnrec,
                 nmnem:='В счет ЗП от '+string(_dDate)+' Имп',
                 cex:=_cex[j_eof-1],
                 choice := 1,
                 koff:=1,
                 kassir:=65535,
                 datan := _dDate,
                 datok := _dDate;
             end;  
Условие выполняется 31 раз, в таблицу добавляется 3 раза
Если условие отключить оператор insert работает корректно.
Darikon
Постоянный обитатель
Сообщения: 188
Зарегистрирован: 17 июн 2008, 17:07
Откуда: Москва
Контактная информация:

Re: insert по условию

Сообщение Darikon »

Возможно, набор данных не удовлетворяет какому либо индексу в данной таблице.
И, пожалуй, явно следует указать

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

nrec:=0;
VarankDA
Посетитель
Сообщения: 47
Зарегистрирован: 15 фев 2011, 12:00
Откуда: Киров, ЗАО "Красный якорь"
Контактная информация:

Re: insert по условию

Сообщение VarankDA »

Попробовал - картинка та же
Darikon
Постоянный обитатель
Сообщения: 188
Зарегистрирован: 17 июн 2008, 17:07
Откуда: Москва
Контактная информация:

Re: insert по условию

Сообщение Darikon »

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

Re: insert по условию

Сообщение Masygreen »

может вы _mnrec переопределяете выше ? и он пересекается с уже вставленным.. объявите это поле как индекс уникальный и пускай он сам там увеличивается
Время ведет!
VarankDA
Посетитель
Сообщения: 47
Зарегистрирован: 15 фев 2011, 12:00
Откуда: Киров, ЗАО "Красный якорь"
Контактная информация:

Re: insert по условию

Сообщение VarankDA »

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

.form 'Imp_540'
.ard
.nameinlist 'Загрузить сведения по ЗП'
.var
   file,n,c: longint;
   i,i_eof : integer; // позиция список
   j,j_eof : integer; // позиция цех
   s: string;
   _prop,_Tabn,_fio: array [1..5000] of string;
   _LS: array [1..5000] of comp;
   _Sum: array [1..5000] of double;
   _f : array [1..5] of integer;
   _s : array [1..5] of string;
   _cex : array [1..100] of comp;
   fl_j : byte;
   _dDate :date;
   _mnrec :word;
.endvar
.create view T1
  var
    _NrecLS :comp;
as
select
  lschet.cex,
  lschet.tabn
from
  lschet
where
  ((_NrecLS == lschet.nrec))
;
!.create view t2 as select * from sys_mbf;
.begin
  i:=1;
  _mnrec:=9999;
  _dDate:=date(30,06,2012);
  file:= CreateFileHandle('xxx');
  File_OpenFile('D:\Temp\ZP\limit.txt', stOpenRead, file);
  While not File_EOF(file) do begin
    file_readln(s, file);
!********Пропуск
    _f[1]:=pos(';',s);
    _Prop[i]:=subStr(s,1,_f[1]-1);
!********Табельный номер
    _s[2]:=subStr(s,length(_Prop[i])+2,length(s)-length(_Prop[i]));
    _f[2]:=pos(';',_s[2]);
    _tabn[i]:=subStr(_s[2],1,_f[2]-1);
!********ФИО
    _s[3]:=subStr(_s[2],length(_tabn[i])+2,length(_s[2])-length(_Tabn[i]));
    _f[3]:=pos(';',_s[3]);
    _fio[i]:=subStr(_s[3],1,_f[3]-1);
!********Лицевой счет
    _s[4]:=subStr(_s[3],length(_fio[i])+2,length(_s[3])-length(_fio[i]));
    _f[4]:=pos(';',_s[4]);
    _LS[i]:=comp(subStr(_s[4],1,_f[4]-1));
!********Сумма
    _s[5]:=subStr(_s[4],length(_LS[i])+2,length(_s[4])-length(_LS[i]));
    _f[5]:=pos(';',_s[5]);
    _Sum[i]:=Double(subStr(_s[5],1,_f[5]-1));
    i_eof:=i;
    i:=i+1;
  end;
  i:=1;
  DeleteFileHandle(file);
  j_eof:=1;
end.
.fields
!  _Ls[i] t1._nrecls T1.lschet.cex fl_j
  j_eof-1
.endfields
.begin
  while i<=i_eof
    T1._loop
      {
         begin
           T1._nrecls:=comp(_ls[i]);
           fl_j:=0;
           for (j:=1;j<=j_eof;j:=j+1)
             if _cex[j]=t1.lschet.cex then fl_j:=1;
           if fl_j=0
             begin
               _cex[j_eof]:=t1.lschet.cex;
               j_eof:=j_eof+1;
               _mnrec:=_mnrec+1;
               insert
                 sys_mbf
               set
                 mnrec:=_mnrec,
                 nmnem:='В счет ЗП от '+string(_dDate)+' Имп',
                 cex:=_cex[j_eof-1],
                 choice := 1,
                 koff:=1,
                 kassir:=65535,
                 datan := _dDate,
                 datok := _dDate;
             end;
           i:=i+1;
         end;
      }
end.
                                         ^
.endForm
Darikon
Постоянный обитатель
Сообщения: 188
Зарегистрирован: 17 июн 2008, 17:07
Откуда: Москва
Контактная информация:

Re: insert по условию

Сообщение Darikon »

а как вы определяете что вставилось три записи?
по сырцам вроде все верно... если не пропустил чего..
VarankDA
Посетитель
Сообщения: 47
Зарегистрирован: 15 фев 2011, 12:00
Откуда: Киров, ЗАО "Красный якорь"
Контактная информация:

Re: insert по условию

Сообщение VarankDA »

смотрю состояние счетчика j_eof с отключенным инсертом
Den
Местный житель
Сообщения: 1842
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Re: insert по условию

Сообщение Den »

логическая таблица.insert table
set
логическая таблица.table.fileds1:=
....
логическая таблица.table.filedsn:=;
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5187
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Re: insert по условию

Сообщение edward_K »

Mnrec там уникальное поле
Darikon
Постоянный обитатель
Сообщения: 188
Зарегистрирован: 17 июн 2008, 17:07
Откуда: Москва
Контактная информация:

Re: insert по условию

Сообщение Darikon »

Соглашусь с Den, это будет правильнее (однозначно определено)
VarankDA
Посетитель
Сообщения: 47
Зарегистрирован: 15 фев 2011, 12:00
Откуда: Киров, ЗАО "Красный якорь"
Контактная информация:

Re: insert по условию

Сообщение VarankDA »

mnrec сам не формируется значение по умолчанию - 0,
Эт еще один вопросик - из какой настройки он берет последний номер для mnrec?
синтаксис переписал, но чет неправильно:

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

T2.insert table
               set
                 sys_mbf.mnrec:=_mnrec,
                 sys_mbf.nmnem:='В счет ЗП от '+string(_dDate)+' Имп',
                 sys_mbf.cex:=_cex[j_eof-1],
                 sys_mbf.choice := 1,
                 sys_mbf.koff:=1,
                 sys_mbf.kassir:=65535,
                 sys_mbf.datan := _dDate,
                 sys_mbf.datok := _dDate;
не указан узел для модификации "sys_mbf.datok := _dDate;" и рантайм 216
Den
Местный житель
Сообщения: 1842
Зарегистрирован: 29 мар 2005, 17:49
Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
Контактная информация:

Re: insert по условию

Сообщение Den »

А так ?...
T2.insert sys_mbf
set
sys_mbf.mnrec:=_mnrec,
sys_mbf.nmnem:='В счет ЗП от '+string(_dDate)+' Имп',
sys_mbf.cex:=_cex[j_eof-1],
sys_mbf.choice := 1,
sys_mbf.koff:=1,
sys_mbf.kassir:=65535,
sys_mbf.datan := _dDate,
sys_mbf.datok := _dDate;
VarankDA
Посетитель
Сообщения: 47
Зарегистрирован: 15 фев 2011, 12:00
Откуда: Киров, ЗАО "Красный якорь"
Контактная информация:

Re: insert по условию

Сообщение VarankDA »

УРА!!! Спасибо - все получилось!
Ответить