20.09.2006, 09:23 | #1 |
Участник
|
Есть форма, на ней расположен TableBox. Нужно было сделать следующее. Изменения, вставления, удаление строки должно проходить через COM объект, объявленный как Automation, при этом Navision все эти операции не должен делать. Я сделал следующим образом.
В триггере OnModify таблицы написал ERROR. В триггере формы OnModifyRecord происходит запуск COM объекта, который изменяет данные в таблице на сервере MSSQL. OnModify отменяет эти действия на форме: возвращает старое содержимое и выделяет его. А изменения в таблице физически произошли, а в TableBox их не видно. Их можно увидеть тогда когда выйдешь из строки и обязательно вернешься в нее. Аналогично с DELETE и INSERT. Только при INSERT не возможно выйти из строки. Как выйти из строки? Как сделать чтобы изменения были видны при смене строки? |
|
20.09.2006, 12:07 | #2 |
Участник
|
|
|
20.09.2006, 12:25 | #3 |
Участник
|
Пробовал. Куда только не писал. Результат либо вовсе форму не открывает, либо выдает сообщение:
Недостаточно памяти (стека) с рекурсивным взовом в программе. Обратитесь к вашему системному администратору. |
|
21.09.2006, 04:36 | #4 |
Участник
|
А если попробовать
CurrForm.UPDATE(FALSE); |
|
21.09.2006, 08:57 | #5 |
Участник
|
Попробовал. Получилось!!!
С OnModify и OnDELETE проблема решена. Остолась разобраться с OnInsert. В триггере OnInsert таблицы написал ERROR. В триггере формы OnInsertRecord происходит запуск COM объекта, который вставляет данные в таблицу на сервере MSSQL. OnInsert отменяет эту операцию. А затем не возможно выйти из вновь созданной строки. Как сделать чтобы можно было выйти из вновь созданной строки? CurrForm.UPDATE - Выдает ошибку. ******************************************* * -103 There is already code with this name: alx.* ******************************************* Где alx - содержимое первого столбца, вновь созданой строки. CurrForm.UPDATE(FALSE) - Выдает сообщение: Внутренняя ошибка 101 в модуле 60. Затем закрывает форму. |
|
22.09.2006, 05:03 | #6 |
Участник
|
Попробуйте ввести глоб. пер. NewLine [Boolean] и в триггер Form.OnNewRecord вставить код
NewLine := TRUE; а в триггер Form.OnAfterGetRecord код IF NewLine THEN BEGIN NewLine := FALSE; CurrForm.UPDATE(FALSE); END; |
|
22.09.2006, 06:52 | #7 |
Участник
|
Спасибо всем за предложенные варинты.
В случае с INSERT можно поступить проще. В таблице триггеры не трогаем. А на форме в триггере OnInsertRecord пишем EXIT(FALSE). И ВСЁ РАБОТАЕТ!!! Огромное спасибо за помощь. |
|