![]() |
#1 |
Участник
|
Собственно сабж ! Пользователь в других окнах формы ввел какие то данные, как мне пере позиционировать текущую запись формы ?
Пробовал вызвать Get(NewBumber) или "No." := NewNumber; Find, выдает ошибку с фразой типа объект "Имя таблицы основания" не может быть изменен ! |
|
![]() |
#2 |
Moderator
|
Несовсем понял, но может достаточно CurrForm.UPDATE(FALSE)?
|
|
![]() |
#3 |
Участник
|
besenok, разобрался с проблемой?
__________________
С уваженем, rootadmin |
|
![]() |
#4 |
Участник
|
Столкнулся с похожей проблемой. Делаю форму типа 703. Тобишь записи на форму подставляются из Temporary таблицы. Необходимо еще сделать фильтрацию по одному полю с датой. На форму положил Textbox и на онвалидейт вызываю из функцию, в которой убираю/добавляю записи во временную таблицу согласно условия фильтра и в конце этой функции вызываю CurrForm.UPDATE. При выполнении ругается "CurrForm.UPDATE не может быть вызван отсюда". Изза чего появляется данная ошибка?
|
|
![]() |
#5 |
Участник
|
Цитата:
Сообщение от VasVovec
![]() Столкнулся с похожей проблемой. Делаю форму типа 703. Тобишь записи на форму подставляются из Temporary таблицы. Необходимо еще сделать фильтрацию по одному полю с датой. На форму положил Textbox и на онвалидейт вызываю из функцию, в которой убираю/добавляю записи во временную таблицу согласно условия фильтра и в конце этой функции вызываю CurrForm.UPDATE. При выполнении ругается "CurrForm.UPDATE не может быть вызван отсюда". Изза чего появляется данная ошибка?
![]() |
|
![]() |
#6 |
Участник
|
Спасибо
![]() Срабатывает хорошо. Сейчас мелкие баги поотлавливаю и будет любо-дорого - TreeView c фильтрацией по полю. Интересует еще такой момент. При редактировании записи понятное дело сделал переброс изменений в реальную таблицу (в триггере OnBeforePutRecord). Но этот триггер постоянно вызывается при переходе курсора с записи на запись (даже если запись совсем и не редактировалась). Это, наверно, не есть хорошо. Есть ли какие-то другие выходы, кроме как завести булинскую переменную и на триггере каждого контрола OnValidate присваивать ей TRUE, как флаг того, что были внесены изменения, и проверять это флаг в OnBeforePutRecord? |
|
![]() |
#7 |
Участник
|
Цитата:
Сообщение от VasVovec
![]() Спасибо
![]() Срабатывает хорошо. Сейчас мелкие баги поотлавливаю и будет любо-дорого - TreeView c фильтрацией по полю. Интересует еще такой момент. При редактировании записи понятное дело сделал переброс изменений в реальную таблицу (в триггере OnBeforePutRecord). Но этот триггер постоянно вызывается при переходе курсора с записи на запись (даже если запись совсем и не редактировалась). Это, наверно, не есть хорошо. Есть ли какие-то другие выходы, кроме как завести булинскую переменную и на триггере каждого контрола OnValidate присваивать ей TRUE, как флаг того, что были внесены изменения, и проверять это флаг в OnBeforePutRecord? |
|
![]() |
#8 |
Участник
|
Кстати может кто-нибудь разъяснит механизм, что происходит при вызове Form.UPDATE? Какой код надо написать, чтоб произошел последовательный вызов OnAfterGetRecord для всех записей на форме?
Код: IF Rec.FIND('-') THEN WHILE Rec.NEXT <> 0 DO |
|
![]() |
#9 |
Участник
|
Цитата:
а триггер OnModify на таблице не помогает?
|
|
![]() |
#10 |
Участник
|
Цитата:
IF Rec.FINDFIRST THEN REPEAT ... UNTIL Rec.NEXT = 0 Почему не использовить вариации Rec.хххFILTERS() чтобы работало так же, как в 703 форме? И чего просто не вынести код в отдельную функцию и вызвать 1 раз? |
|
![]() |
#11 |
Участник
|
Цитата:
![]() ![]() |
|
![]() |
#12 |
Участник
|
Цитата:
![]() |
|
![]() |
#13 |
Участник
|
|
|
![]() |
#14 |
Участник
|
"Вы никогда не решите проблему, если будете думать так же как те, кто ее придумал" (с) Эйнштейн
|
|
![]() |
#15 |
Участник
|
|
|
![]() |
#16 |
Участник
|
Интересная дисскуссия получилась
![]() Энштейн вообще был очень умный человек ![]() Я разобрался где был баг, всетаки после UPDATE срабатывает OnAfterGetRecord. Все заработало. На этой же форме правда столкнулся с еще 1 проблемой с которой сталкивался и раньше в других местах: TempHRDep - переменная типа Record (Temporary = TRUE) на основе той же таблицы, что и у SourceTable формы. Код: Form - OnNextRecord(Steps : Integer) : Integer TempHRDep.COPY(Rec); ResultSteps := TempHRDep.NEXT(Steps); Rec := TempHRDep; EXIT(ResultSteps); Код: Form - OnModifyRecord() : Boolean TempHRDep.TRANSFERFIELDS(Rec); TempHRDep.MODIFY; "Другой пользователь изменил запись НазваниеТаблицы после того, как она была прочитана из базы данных... и т.д." |
|
![]() |
#17 |
Участник
|
Цитата:
Сообщение от VasVovec
![]() Вот значит запускаю форму. Редактирую какое-нибудь поле у записи, перехожу на другую запись - отредактированные изменения сохраняются. Перехожу на отредактированное поле записи, опять его редактирую, перехожу на другую запись - вылазит ошибка:
"Другой пользователь изменил запись НазваниеТаблицы после того, как она была прочитана из базы данных... и т.д." ![]() |
|
![]() |
#18 |
Участник
|
Нет. у меня чтото не лечится. Нид ё хелп, умные люди!
|
|
![]() |
#19 |
Участник
|
|
|
![]() |
#20 |
Участник
|
Вылечил следующим образом: в OnAfterGetCurrentRecord написал:
Код: Form - OnAfterGetCurrRecord() HRDep.GET(Rec.Code); Rec:=HRDep; |
|