Страница 1 из 1
insert по условию
Добавлено: 08 окт 2012, 11:13
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 работает корректно.
Re: insert по условию
Добавлено: 08 окт 2012, 11:46
Darikon
Возможно, набор данных не удовлетворяет какому либо индексу в данной таблице.
И, пожалуй, явно следует указать
Re: insert по условию
Добавлено: 08 окт 2012, 12:28
VarankDA
Попробовал - картинка та же
Re: insert по условию
Добавлено: 08 окт 2012, 12:32
Darikon
предлагаю выложить код не только тела цикла, но и самого цикла,
иначе не видна картинка.
Re: insert по условию
Добавлено: 08 окт 2012, 12:42
Masygreen
может вы _mnrec переопределяете выше ? и он пересекается с уже вставленным.. объявите это поле как индекс уникальный и пускай он сам там увеличивается
Re: insert по условию
Добавлено: 08 окт 2012, 12:46
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
Re: insert по условию
Добавлено: 08 окт 2012, 13:33
Darikon
а как вы определяете что вставилось три записи?
по сырцам вроде все верно... если не пропустил чего..
Re: insert по условию
Добавлено: 08 окт 2012, 13:56
VarankDA
смотрю состояние счетчика j_eof с отключенным инсертом
Re: insert по условию
Добавлено: 08 окт 2012, 14:21
Den
логическая таблица.insert table
set
логическая таблица.table.fileds1:=
....
логическая таблица.table.filedsn:=;
Re: insert по условию
Добавлено: 08 окт 2012, 14:54
edward_K
Mnrec там уникальное поле
Re: insert по условию
Добавлено: 08 окт 2012, 15:18
Darikon
Соглашусь с Den, это будет правильнее (однозначно определено)
Re: insert по условию
Добавлено: 08 окт 2012, 16:21
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
Re: insert по условию
Добавлено: 08 окт 2012, 16:32
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;
Re: insert по условию
Добавлено: 08 окт 2012, 16:42
VarankDA
УРА!!! Спасибо - все получилось!