01.09.2004, 14:48 | #1 |
Участник
|
Собственно сабж ! Пользователь в других окнах формы ввел какие то данные, как мне пере позиционировать текущую запись формы ?
Пробовал вызвать Get(NewBumber) или "No." := NewNumber; Find, выдает ошибку с фразой типа объект "Имя таблицы основания" не может быть изменен ! |
|
01.09.2004, 18:24 | #2 |
Moderator
|
Несовсем понял, но может достаточно CurrForm.UPDATE(FALSE)?
|
|
17.09.2004, 18:03 | #3 |
Участник
|
besenok, разобрался с проблемой?
__________________
С уваженем, rootadmin |
|
24.12.2007, 09:48 | #4 |
Участник
|
Столкнулся с похожей проблемой. Делаю форму типа 703. Тобишь записи на форму подставляются из Temporary таблицы. Необходимо еще сделать фильтрацию по одному полю с датой. На форму положил Textbox и на онвалидейт вызываю из функцию, в которой убираю/добавляю записи во временную таблицу согласно условия фильтра и в конце этой функции вызываю CurrForm.UPDATE. При выполнении ругается "CurrForm.UPDATE не может быть вызван отсюда". Изза чего появляется данная ошибка?
|
|
24.12.2007, 11:03 | #5 |
Участник
|
Цитата:
Сообщение от VasVovec
Столкнулся с похожей проблемой. Делаю форму типа 703. Тобишь записи на форму подставляются из Temporary таблицы. Необходимо еще сделать фильтрацию по одному полю с датой. На форму положил Textbox и на онвалидейт вызываю из функцию, в которой убираю/добавляю записи во временную таблицу согласно условия фильтра и в конце этой функции вызываю CurrForm.UPDATE. При выполнении ругается "CurrForm.UPDATE не может быть вызван отсюда". Изза чего появляется данная ошибка?
|
|
24.12.2007, 12:03 | #6 |
Участник
|
Спасибо хитро придумано. Теперь там, где надо обновится, вызываю CurrForm.Activate, а в OnActivate вызывается CurrForm.UPDATE.
Срабатывает хорошо. Сейчас мелкие баги поотлавливаю и будет любо-дорого - TreeView c фильтрацией по полю. Интересует еще такой момент. При редактировании записи понятное дело сделал переброс изменений в реальную таблицу (в триггере OnBeforePutRecord). Но этот триггер постоянно вызывается при переходе курсора с записи на запись (даже если запись совсем и не редактировалась). Это, наверно, не есть хорошо. Есть ли какие-то другие выходы, кроме как завести булинскую переменную и на триггере каждого контрола OnValidate присваивать ей TRUE, как флаг того, что были внесены изменения, и проверять это флаг в OnBeforePutRecord? |
|
24.12.2007, 12:14 | #7 |
Участник
|
Цитата:
Сообщение от VasVovec
Спасибо хитро придумано. Теперь там, где надо обновится, вызываю CurrForm.Activate, а в OnActivate вызывается CurrForm.UPDATE.
Срабатывает хорошо. Сейчас мелкие баги поотлавливаю и будет любо-дорого - TreeView c фильтрацией по полю. Интересует еще такой момент. При редактировании записи понятное дело сделал переброс изменений в реальную таблицу (в триггере OnBeforePutRecord). Но этот триггер постоянно вызывается при переходе курсора с записи на запись (даже если запись совсем и не редактировалась). Это, наверно, не есть хорошо. Есть ли какие-то другие выходы, кроме как завести булинскую переменную и на триггере каждого контрола OnValidate присваивать ей TRUE, как флаг того, что были внесены изменения, и проверять это флаг в OnBeforePutRecord? |
|
24.12.2007, 12:48 | #8 |
Участник
|
Кстати может кто-нибудь разъяснит механизм, что происходит при вызове Form.UPDATE? Какой код надо написать, чтоб произошел последовательный вызов OnAfterGetRecord для всех записей на форме?
Код: IF Rec.FIND('-') THEN WHILE Rec.NEXT <> 0 DO |
|
24.12.2007, 12:51 | #9 |
Участник
|
Цитата:
а триггер OnModify на таблице не помогает?
|
|
24.12.2007, 12:58 | #10 |
Участник
|
Цитата:
IF Rec.FINDFIRST THEN REPEAT ... UNTIL Rec.NEXT = 0 Почему не использовить вариации Rec.хххFILTERS() чтобы работало так же, как в 703 форме? И чего просто не вынести код в отдельную функцию и вызвать 1 раз? |
|
24.12.2007, 13:03 | #11 |
Участник
|
RedFox, Ты из далека пошел Мне никогда не приходит в голову, что-то передумывать когда у человека конкретные вопросы, значит ему так нравится реализовывать, а если вести дискусию как лучше, то так в посте и надо писать - КАК ЛУЧШЕ РЕШИТЬ ТАКУЮ-ТО ТАКУЮ-ТО ПРОБЛЕМУ?
|
|
24.12.2007, 13:04 | #12 |
Участник
|
между этими двумя кострукциями есть разница, в первом случае будут обработаны все записи, кроме первой, во втором - все...
|
|
24.12.2007, 13:07 | #13 |
Участник
|
|
|
24.12.2007, 13:39 | #14 |
Участник
|
"Вы никогда не решите проблему, если будете думать так же как те, кто ее придумал" (с) Эйнштейн
|
|
24.12.2007, 13:50 | #15 |
Участник
|
|
|
24.12.2007, 14:35 | #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; "Другой пользователь изменил запись НазваниеТаблицы после того, как она была прочитана из базы данных... и т.д." |
|
24.12.2007, 14:51 | #17 |
Участник
|
Цитата:
Сообщение от VasVovec
Вот значит запускаю форму. Редактирую какое-нибудь поле у записи, перехожу на другую запись - отредактированные изменения сохраняются. Перехожу на отредактированное поле записи, опять его редактирую, перехожу на другую запись - вылазит ошибка:
"Другой пользователь изменил запись НазваниеТаблицы после того, как она была прочитана из базы данных... и т.д." |
|
24.12.2007, 15:29 | #18 |
Участник
|
Нет. у меня чтото не лечится. Нид ё хелп, умные люди!
|
|
24.12.2007, 15:37 | #19 |
Участник
|
|
|
24.12.2007, 16:25 | #20 |
Участник
|
Вылечил следующим образом: в OnAfterGetCurrentRecord написал:
Код: Form - OnAfterGetCurrRecord() HRDep.GET(Rec.Code); Rec:=HRDep; |
|