вставка новой записи в таблицу attrval из формы
Модераторы: m0p3e, edward_K, Модераторы
вставка новой записи в таблицу attrval из формы
Добрый день!
Продолжаю мучить форму Т-13 (табель).
Мне надо из прямо из формы создать атрибут (запись в Attrval) для записи таблицы lstab.
Создала новый атрибут для таблицы lstab с названием "АФД_исходный".
Отчет должен записать в него информацию, как только табель сотрудника был распечатан (точнее, сформирована данная печатная форма).
В отчет вставляю такие строки:
Set attrval.nrec:=getnextnrec(tnattrval,0);
set attrval.wtable:=16044;
set attrval.crec:=nrec_lstab;
set attrval.cattrnam:=nrec_attrInitAFD;
set attrval.vstring:=_strAttr;
Insert current attrval;
У нас несколько разных баз, так вот, на маленькой работает без проблем, а на большой сначала долго висит, потом ругается на дублированное значение nrec-а!
Как это может быть, ведь я генерю новый nrec!
Делала и по-другому:
Insert attrval
set wtable:=16044, crec:=nrec_lstab, cattrnam:=nrec_attrInitAFD, vstring:=_strAttr;
но с тем же успехом, а, точнее, неуспехом ((
Продолжаю мучить форму Т-13 (табель).
Мне надо из прямо из формы создать атрибут (запись в Attrval) для записи таблицы lstab.
Создала новый атрибут для таблицы lstab с названием "АФД_исходный".
Отчет должен записать в него информацию, как только табель сотрудника был распечатан (точнее, сформирована данная печатная форма).
В отчет вставляю такие строки:
Set attrval.nrec:=getnextnrec(tnattrval,0);
set attrval.wtable:=16044;
set attrval.crec:=nrec_lstab;
set attrval.cattrnam:=nrec_attrInitAFD;
set attrval.vstring:=_strAttr;
Insert current attrval;
У нас несколько разных баз, так вот, на маленькой работает без проблем, а на большой сначала долго висит, потом ругается на дублированное значение nrec-а!
Как это может быть, ведь я генерю новый nrec!
Делала и по-другому:
Insert attrval
set wtable:=16044, crec:=nrec_lstab, cattrnam:=nrec_attrInitAFD, vstring:=_strAttr;
но с тем же успехом, а, точнее, неуспехом ((
Кто сказал, что бесполезно биться головой об стену?!
-
- Местный житель
- Сообщения: 1844
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
- Контактная информация:
Re: вставка новой записи в таблицу attrval из формы
Насколько помню, в fcom операции модицикации не могут быть вне LOT
Т.е. attrval дложна быть описана внутри create view И обращение в коде вставки должно идти с префиксами имени этой CREATE VIEW. Вроде :
Т.е. attrval дложна быть описана внутри create view И обращение в коде вставки должно идти с префиксами имени этой CREATE VIEW. Вроде :
Код: Выделить всё
Set view1.attrval.nrec:=getnextnrec(view1.tnattrval,0);
set view1.attrval.wtable:=16044;
set view1.attrval.crec:=nrec_lstab;
set view1.attrval.cattrnam:=nrec_attrInitAFD;
set view1.attrval.vstring:=_strAttr;
view1.Insert current attrval;
Re: вставка новой записи в таблицу attrval из формы
но ведь работает на небольшой базе!
Но конечно попробую...
Но конечно попробую...
Кто сказал, что бесполезно биться головой об стену?!
-
- Местный житель
- Сообщения: 1844
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Ярославская область ОАО "Часовой завод Чайка" г. Углич
- Контактная информация:
Re: вставка новой записи в таблицу attrval из формы
+view.clearbuffer(..)
+set уберите у каждой строчки - ни к чему он там
+set уберите у каждой строчки - ни к чему он там
Re: вставка новой записи в таблицу attrval из формы
.create view tvav as select *
from attrval
;
...
Tvav.Clearbuffer(Tvav.tnattrval);
Tvav.attrval.nrec:=getnextnrec(Tvav.tnattrval,0);
Tvav.attrval.wtable:=16044;
Tvav.attrval.crec:=nrec_lstab;
Tvav.attrval.cattrnam:=nrec_attrInitAFD;
Tvav.attrval.vstring:=_strAttr;
Tvav.Insert current attrval;
увы, результат все тот же
Ошибка N 5.
Дублированное значение при уникальном ключе.
В таблице ATTRVAL повторяется значение поля
NREC : "281474976721367",
что противоречит описанной в словаре уникальности
индекса ATTRVAL0. таблица N1006
from attrval
;
...
Tvav.Clearbuffer(Tvav.tnattrval);
Tvav.attrval.nrec:=getnextnrec(Tvav.tnattrval,0);
Tvav.attrval.wtable:=16044;
Tvav.attrval.crec:=nrec_lstab;
Tvav.attrval.cattrnam:=nrec_attrInitAFD;
Tvav.attrval.vstring:=_strAttr;
Tvav.Insert current attrval;
увы, результат все тот же
Ошибка N 5.
Дублированное значение при уникальном ключе.
В таблице ATTRVAL повторяется значение поля
NREC : "281474976721367",
что противоречит описанной в словаре уникальности
индекса ATTRVAL0. таблица N1006
Кто сказал, что бесполезно биться головой об стену?!
Re: вставка новой записи в таблицу attrval из формы
А почему не использовать объект ExtAttr? У него есть методы для записи значений в атрибуты - sSetAttr и sSetAttdID.
Будет как-то так:
Будет как-то так:
Код: Выделить всё
!объявить
.declare
#Include ExtAttr.vih
.enddeclare
!Создать переменную для работы с объектом
.var
iAttr : C_ExtClass::iExtAttr;
.endVar
! там где надо записать значение в атрибут:
.begin
iAttr.sSetAttrID(16044, nrec_lstab, nrec_attrInitAFD, _strAttr);
//Или по имени:
//iAttr.sSetAttr(16044, nrec_lstab, <Имя атрибута>, _strAttr);
end.
Re: вставка новой записи в таблицу attrval из формы
Я как-то с этим не работала((
это по сути своей то же самое? такая же запись в таблицу AttrVal?
это по сути своей то же самое? такая же запись в таблицу AttrVal?
Кто сказал, что бесполезно биться головой об стену?!
Re: вставка новой записи в таблицу attrval из формы
Ага, совершенно стандартная запись. И намного проще, чем возиться с таблицами.
Re: вставка новой записи в таблицу attrval из формы
А можно пример, как это синтаксически правильно должно быть оформлено? Версия 8,1
Кто сказал, что бесполезно биться головой об стену?!
Re: вставка новой записи в таблицу attrval из формы
Я вроде примерно написала пример.
1. Подключить описание объекта. Секция .declare/.enddeclare - в начале формы. Инклудом подключается описание (ExtAttr.vih). (если компилируете через проект - можно добавить #include ExtAttr.vih в проекте, а не в форме). Соответственно, в cfg должен быть прописан путь где искать инслуды (Compilers.IncludesPath) и положить туда файл. Сам файл найдете в FRM\C_ExtClass.rar (Для 8.1)
2. Добавить переменную в секцию .var/.EndVar, в компанию к остальным переменным, если они есть.
3. Где нужно - вызывать методы объекта через переменную. Если надо установить атрибут - логично это делать в .begin/end. Если наоборот - получить и вывести в форму, можно прямо в .fields/.endFields. Описание всех методов есть в файле ExtAttr.vih или в документации exe\GalDoc
1. Подключить описание объекта. Секция .declare/.enddeclare - в начале формы. Инклудом подключается описание (ExtAttr.vih). (если компилируете через проект - можно добавить #include ExtAttr.vih в проекте, а не в форме). Соответственно, в cfg должен быть прописан путь где искать инслуды (Compilers.IncludesPath) и положить туда файл. Сам файл найдете в FRM\C_ExtClass.rar (Для 8.1)
2. Добавить переменную в секцию .var/.EndVar, в компанию к остальным переменным, если они есть.
3. Где нужно - вызывать методы объекта через переменную. Если надо установить атрибут - логично это делать в .begin/end. Если наоборот - получить и вывести в форму, можно прямо в .fields/.endFields. Описание всех методов есть в файле ExtAttr.vih или в документации exe\GalDoc
Re: вставка новой записи в таблицу attrval из формы
Сделала так:
.linkform ’TabT13_LS_AFDinit’ prototype is ’TabT13’
.declare
#Include ExtAttr.Vih
.enddeclare
.nameinlist ’Фактический табель для выгрузки в архив финансовых документов’
.group ’Т-13’
.var
iAttr: iExtAttr;
.endvar
...
.procedure writeAttr;
Begin
iAttr.sSetAttrID(16044, nrec_lstab, nrec_attrInitAFD, _strAttr);
end.
Но, увы, обмануть не удалось... теперь такая ошибка:
"Возникло необработанное исключение
ExObjIfcNoLoad (ExRef)
ошибка загрузки объекта из ресурсного файла(iExtAttr)
"Да" - Продолжить, "Нет" - Отлаживать в окне отладчика
"Отмена" - Не выдавать больше это сообщение - Да !
Возникло необработанное исключение
ExObjIfcNoInit (ExRef)
ссылка не была инициализирована
"Да" - Продолжить, "Нет" - Отлаживать в окне отладчика
"Отмена" - Не выдавать больше это сообщение - Да !
.linkform ’TabT13_LS_AFDinit’ prototype is ’TabT13’
.declare
#Include ExtAttr.Vih
.enddeclare
.nameinlist ’Фактический табель для выгрузки в архив финансовых документов’
.group ’Т-13’
.var
iAttr: iExtAttr;
.endvar
...
.procedure writeAttr;
Begin
iAttr.sSetAttrID(16044, nrec_lstab, nrec_attrInitAFD, _strAttr);
end.
Но, увы, обмануть не удалось... теперь такая ошибка:
"Возникло необработанное исключение
ExObjIfcNoLoad (ExRef)
ошибка загрузки объекта из ресурсного файла(iExtAttr)
"Да" - Продолжить, "Нет" - Отлаживать в окне отладчика
"Отмена" - Не выдавать больше это сообщение - Да !
Возникло необработанное исключение
ExObjIfcNoInit (ExRef)
ссылка не была инициализирована
"Да" - Продолжить, "Нет" - Отлаживать в окне отладчика
"Отмена" - Не выдавать больше это сообщение - Да !
Кто сказал, что бесполезно биться головой об стену?!
-
- Местный житель
- Сообщения: 2896
- Зарегистрирован: 24 июн 2005, 12:12
- Откуда: Иркутская область
Re: вставка новой записи в таблицу attrval из формы
в проекте где собираете форму укажите
и соберите заново
Код: Выделить всё
#define ComponentVersion
Re: вставка новой записи в таблицу attrval из формы
Попробуйте в описании переменной указать компонент:
Код: Выделить всё
iAttr: C_ExtClass::iExtAttr;
Re: вставка новой записи в таблицу attrval из формы
Все получилось! Спасибо, Ольга и Алексей!
Но, все равно теперь мучает вопрос, почему же обычный insert не отрабатывал....
Но, все равно теперь мучает вопрос, почему же обычный insert не отрабатывал....
Кто сказал, что бесполезно биться головой об стену?!
-
- Заслуженный деятель интернет-сообщества
- Сообщения: 5188
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: SPB galaxy spb
Re: вставка новой записи в таблицу attrval из формы
Не люблю функция GetNextNrec. Надежней Attrval.nrec:=0 либо vvv.ClearBuffer(vvv.tnAttrVal)