почему не всегда работает update?

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

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

Ответить
sildae
Постоянный обитатель
Сообщения: 188
Зарегистрирован: 04 апр 2009, 15:56
Откуда: сАРАТОВ
Контактная информация:

почему не всегда работает update?

Сообщение sildae »

Здравствуйте, подскажите, почему на большом интервале дат у меня срабатывает update, а на маленьком до месяца, всегда вставляется новая строка , всегда срабатывает INSERT .
lim3 из проекта Table Struct Lim3
(
barkod: string[81],
LASTUSER: string[21],
DSUMLIMIT: double,
DCOTP: double,
NAMEMC: string[81],
DCOT: DOUBLE,
DCON: DOUBLE,
DNAZ201: DOUBLE,
DNAZ502: DOUBLE,
DNAZ103: DOUBLE,
DNAZ600:DOUBLE,
DNAZ102:DOUBLE,
DNAZP630:DOUBLE,
DNAZR630:DOUBLE,
DNAZ106:DOUBLE,
DNAZR600:DOUBLE,
DNAZ202:DOUBLE,
DNAZ204:DOUBLE,
DnazPOV:Double,
DNazPOP:Double,
DnazROv:Double,
DnazROP:Double,
D1:DOUBLE,
D2:DOUBLE,
SSIMV: STRING[81],
sh:string[20],
svet:string[20],
CKATMC: comp,
SumOO: Double
)
With Index
(
Index00 =barkod+Lastuser,
Index01 = ckatmc,
Index03 = SumOO,
INDEX04 = LASTUSER
);
#make "C:\ira\forms8\mc\nnn\i2.slk"

Присоединенная форма.
...
.Create view ord1
from SKLORDER,sporder,synonym katmc kat1
where
((sklOrder.nrec==spOrder.CSKLORDER
and
sporder.cmc==kat1.nrec
and Dat1 <<= SklOrder.dord
and Dat2 >>=sklorder.dord
))
and
(
sklorder.CSOPR=comp(0000000000000000h)
and sklorder.tipord=tp
and sklorder.vidorder=vid1
and sklOrder.cpodr=sklad_nrec
)
;
.create view tt
from lim3
order by barkod,LASTUSER
;



...
!расходный ордер операц с производством
.begin
tp:=2;Skolf:=0;vid1:=1;
end.
.{table 'ord1.sklorder'
.{table 'ord1.sporder'
.begin
NamMc:='';Skolf:=0;
C_Mc:=ord1.spOrder.Cmc;
CVET:=sTXoGetField('SpKau','Name',GetKauMcUsl(10087,281474976710658,0,c_mc));
NomMc:=StxoGetField('KatMC','Barkod',C_Mc);
Nammc:=StxoGetField('KatMC','Barkod',C_Mc)+' '+StxoGetField('KatMC','Name',C_Mc);
SkolF:=Double(ord1.Sporder.kol);
if (GetFirst lim3
where (( CVET ==lim3.Barkod AND NomMc==lim3.Lastuser)) = tsOk) Then
{
Update current lim3 set
lim3.DNAZROP:=lim3.DNAZROP+SkolF;
}
else
insert lim3
set
lim3.barkod:=CVET,
lim3.Lastuser:=NomMc,
lim3.namemc:=NamMc+' '+bk,
lim3.svet:=CVET,
lim3.DNAZROP:=SkolF;
end.
.}
.}
Такое впечатление, что таблица tt на маленьких интервалах времени не успевает создаваться. И поэтому образуется у меня много одинаковых строчек.
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5187
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Re: почему не всегда работает update?

Сообщение edward_K »

про остальное я молчу. НЕ ВИДЕЛИ ВЫ БОЛЬЩИХ БАЗ! Иначе бы так запросы не писали.
При поиске в вашей табле нужно указывать имя вьюхи и проверте длину баркода.
sildae
Постоянный обитатель
Сообщения: 188
Зарегистрирован: 04 апр 2009, 15:56
Откуда: сАРАТОВ
Контактная информация:

Re: почему не всегда работает update?

Сообщение sildae »

if (GetFirst lim3
where (( CVET ==lim3.Barkod AND NomMc==lim3.Lastuser)) = tsOk) Then

У меня не пропускает компилятор , если я пишу if (GetFirst lim3
where (( CVET ==tt.lim3.Barkod AND NomMc==tt.lim3.Lastuser)) = tsOk) Then...

А если искать в if (GetFirst tt , то как же спозиционировать на lim3 ? Чтобы там вставить строчку? А длина баркода у нас всегда одинаковая , 13 символов...
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5187
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Re: почему не всегда работает update?

Сообщение edward_K »

if (tt.GetFirst lim3 where (( CVET ==lim3.Barkod AND NomMc==lim3.Lastuser)) = tsOk)
:=tt.lim3.Barkod
и так далее
а CVET вписывается?
sildae
Постоянный обитатель
Сообщения: 188
Зарегистрирован: 04 апр 2009, 15:56
Откуда: сАРАТОВ
Контактная информация:

Re: почему не всегда работает update?

Сообщение sildae »

cvet вписывается , но теперь получается белиберда, надо вставить в lim3, а current в lim3 устанавливается куда попало :(
if (tt.GetFirst lim3
where (( CVET ==lim3.Barkod AND NomMc==lim3.Lastuser)) = tsOk) Then
{
Update current lim3 set
lim3.DNAZPOp:=lim3.DNAZPOp+SkolF;
!Message('Нашли');
}
else
insert lim3
set
lim3.barkod:=CVET,
lim3.Lastuser:=NomMc,
lim3.namemc:=NamMc+' '+bk,
lim3.svet:=CVET,
lim3.DNAZPOp:=SkolF;
end.
edward_K
Заслуженный деятель интернет-сообщества
Сообщения: 5187
Зарегистрирован: 29 мар 2005, 17:49
Откуда: SPB galaxy spb

Re: почему не всегда работает update?

Сообщение edward_K »

tt. нужно добавлять ко всем обращениям с lim3
tt.update ...
tt.lim3....:=tt.lim3....+...
sildae
Постоянный обитатель
Сообщения: 188
Зарегистрирован: 04 апр 2009, 15:56
Откуда: сАРАТОВ
Контактная информация:

Re: почему не всегда работает update?

Сообщение sildae »

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

Re: почему не всегда работает update?

Сообщение Masygreen »

вот хз .. хотя и рекоменудуется такая конструкция ...

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

Update current lim3
set
lim3.DNAZPOp:=lim3.DNAZPOp+SkolF;
но я всегда пользую

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

lim3.DNAZPOp:=lim3.DNAZPOp+SkolF;
Update current lim3.DNAZPOp;
хотя нет ..я обманываю .. я никогда через вюьхи не апдейчу ... :)
Время ведет!
Ответить