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

PUT не путкает. Почему?

Добавлено: 08 Июнь 2007, 9:51
optron
Clarion 5.5 EE
Есть вот такой кусок кода:

KNI:INVNO=PRI:Kod
get(Kniga,KNI:KeyINVNO)
if ~error()
KNI:Kolvo=KNI:Kolvo-Kolvo
KNI:Sum=KNI:Sum-Summ
put(Kniga)
Message('Error - '&errorcode()&'|')
else
Message('Запись не найдена'&'|','Ошибка!',ICON:Exclamation)
.

к put - у доходит, мессейджем проверяю в этот момент KNI:Kolvo = 0. В базе остается KNI:Kolvo=1. errorcode() после PUT =0.

В чем может быть проблема?

Добавлено: 08 Июнь 2007, 11:23
ShilakAV
а ты после put поставь - if errorcode() then message(error()).
мож дублирование ключей...

Добавлено: 08 Июнь 2007, 12:51
optron
Так ить errorcode() 0 кажет. Следовательно нет ошибки то ...
За... уже. 2-й день сижу над какой то фигней и всё без толку.

Добавлено: 08 Июнь 2007, 15:09
StillZero
дело не в PUT
см. в другую сторону

сделай мелкую приладу чистую и напиши там этот код...
думаю он будет работать

Добавлено: 08 Июнь 2007, 15:41
Игорь Столяров
Или попробуй заблокировать файл на момент выполнения
операции. Для TPS, наверно проще всего:

Logout(MyFile,1)
If ErrorCode() then Stop('Logout ?!').

....

PUT(MyFile)

Commit
If ErrorCode() then Stop('Commit ?!').

Добавлено: 08 Июнь 2007, 16:02
optron
Бесполезно. и с Logout не работает. Вообще интересно - если в файле Kniga непустое стринговое поле KNI:Otdel, то не работает. А вот если KNI:Otdel пустое (='' ), то всё отрабатывает. А причем тут вообще это поле - непонятно. Причем перед GET - ом делаю clear(KNI:Record), всё равно не работает.

Добавлено: 08 Июнь 2007, 17:26
Игорь Столяров
1. А проверь описание структуры таблицы ... Может быть там просто есть наложение полей (OVER) ?

2. Попробуй удалить физический файл, создать его заново и попробовать работу кода. У меня были проблемы с записью (и тоже без ошибок) при частичном разрушении ключа ...

Добавлено: 09 Июнь 2007, 10:00
optron
Игорь Столяров писал(а):1. А проверь описание структуры таблицы ... Может быть там просто есть наложение полей (OVER) ?
Наложение полей - это как? Можно поподробнее

Создал вообще новый файл. Внес туда всего одну запись. Всё равно не работает.

Добавлено: 09 Июнь 2007, 12:38
Yufil
optron писал(а):
Игорь Столяров писал(а):1. А проверь описание структуры таблицы ... Может быть там просто есть наложение полей (OVER) ?
Наложение полей - это как? Можно поподробнее

Создал вообще новый файл. Внес туда всего одну запись. Всё равно не работает.
Структуру БД- в студию!

Добавлено: 09 Июнь 2007, 14:05
optron
Yufil писал(а): Структуру БД- в студию!
Kniga FILE,DRIVER('TOPSPEED'),PRE(KNI),CREATE,BINDABLE,THREAD
KeyOtdel KEY(KNI:Otdel),DUP,NOCASE,OPT
KeyPodr KEY(KNI:KodPodr),DUP,NOCASE,OPT
KodDia_Key KEY(KNI:KodDia),DUP,NOCASE,OPT
KeyINVNO KEY(KNI:INVNO),NOCASE,OPT
KeyAvtor KEY(KNI:Avtor),DUP,NOCASE
KeyNazv KEY(KNI:Nazv),DUP,NOCASE
Record RECORD,PRE()
Num ULONG
INVNO ULONG
Avtor STRING(30)
Nazv STRING(100)
Otdel STRING(40)
KodPodr USHORT
Fam_Pol STRING(20)
PoluchVP STRING(40)
FIOVP STRING(20)
Data_p DATE
Cena DECIMAL(9,2)
Kolvo LONG
Sum REAL
Debet STRING(20)
Kredit STRING(20)
PrizBIS STRING(1)
Dat_Spis DATE
Dat_vp DATE
KodDia USHORT

Нету по ходу OVER - ов тут никаких.

Добавлено: 09 Июнь 2007, 14:57
ShilakAV
я бы на твоем месте не стал в с5.5 использовать названия полей типа Dat_Spis и Dat_sp в одной таблице. Как то помню глюков с этим наловил немерянно. Именно в 5.5 такое творилось. Посмотри во вьевере как названия этих полей выглядят - убедишься...

Добавлено: 09 Июнь 2007, 15:14
optron
ShilakAV писал(а):я бы на твоем месте не стал в с5.5 использовать названия полей типа Dat_Spis и Dat_sp в одной таблице. Как то помню глюков с этим наловил немерянно. Именно в 5.5 такое творилось. Посмотри во вьевере как названия этих полей выглядят - убедишься...
А в чем проблема - в нижнем слеше?

Добавлено: 09 Июнь 2007, 15:58
ShilakAV
А в чем проблема - в нижнем слеше?
ну...
но я ради эксперимента создал такой файл и проверил твой кусок кода - все работает. А ты пробовал как StillZero рекомендовал?

Добавлено: 09 Июнь 2007, 16:02
optron
ShilakAV писал(а):
А в чем проблема - в нижнем слеше?
ну...
но я ради эксперимента создал такой файл и проверил твой кусок кода - все работает. А ты пробовал как StillZero рекомендовал?
В том то и дело. Полный код эмбедза там с if -ами. Так вот такой код там встречается в ... 3-х местах. В 2-х отрабатывает прекрасно, в этом месте ну хоть тресни ничего не помогает. Уже голова чешется. Полный нервоз или невроз. Можно конечно плюнуть на всё и отключить кое - что, но тут уже дело принципа - или я его, или он меня.

Добавлено: 09 Июнь 2007, 16:37
ShilakAV
Честно говоря, никогда не встречал такого, чтобы если put не дал ошибку, то не произвел бы запись в файл :shock: . Может ты не тот файл смотришь? :)