powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как реализовать событие типа AfterUpdate в Grid-e для записи ?
12 сообщений из 12, страница 1 из 1
Как реализовать событие типа AfterUpdate в Grid-e для записи ?
    #33967840
SergeyVZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообщем, поделителсь идеями, как отследить изменение данных записи, а не отдельного поля ?
...
Рейтинг: 0 / 0
Как реализовать событие типа AfterUpdate в Grid-e для записи ?
    #33967890
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Скажи цель, для чего нужно.
...
Рейтинг: 0 / 0
Как реализовать событие типа AfterUpdate в Grid-e для записи ?
    #33967914
-=AlexiS=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если ты имеешь ввиду что тебе нужно отследить что любое поле в текушей записи изменилось , то
у меня например в гриде на AfterRowColChange
стоит вызов метода формы IsDataChanged
с таким кодом

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
AFIELDS(mas_update_field)

for update_mm= 1  to alen(mas_update_field, 1 )
 if    &mas_update_field[update_mm, 1 ]==oldval(mas_update_field[update_mm, 1 ]);
     .or.(isnull(&mas_update_field[update_mm, 1 ]).and.isnull(oldval(mas_update_field[update_mm, 1 ]) ))

 ELSE
    ret=.t.
 ENDIF
 
 IF ret=.t.
   EXIT
 endif   
next 

RETURN ret 

также можно использовать
GETNEXTMODIFIED и GETFLDSTATE
...
Рейтинг: 0 / 0
Как реализовать событие типа AfterUpdate в Grid-e для записи ?
    #33968462
SergeyVZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PaulWistСкажи цель, для чего нужно.
К примеру для корректности ввод. Ну скажем, поле А должно быть всегда меньше Б, а С = {10,20,30} и А<=C<=B. Потм все они могут корректироватся естественно. И не очень хочется ставить обработчик на каждое поле, лучше бы отловить момент, когда пользователь отредактировал то, что ему надо было и уходит с записи на следующую.
А если повесить что на AfterRowColChange, то может быть так, к примеру:
А=5, С=10, В=15, дальше пользователь меняет, к примеру С=20 - и что дальше ? А<=C<=B - ошибка ? или он хочет продолжить редакрирование ?
Примеров может быть масса. Вообщем хотелось бы отловить событие окончания редактирования записи. Вообщем, еcли кто знаком с Access, там есть событие AfterUpdate для формы, хотелось бы такое для Grid-a.
...
Рейтинг: 0 / 0
Как реализовать событие типа AfterUpdate в Grid-e для записи ?
    #33968585
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SergeyVZ PaulWistСкажи цель, для чего нужно.
К примеру для корректности ввод. Ну скажем, поле А должно быть всегда меньше Б, а С = {10,20,30} и А<=C<=B. Потм все они могут корректироватся естественно. И не очень хочется ставить обработчик на каждое поле, лучше бы отловить момент, когда пользователь отредактировал то, что ему надо было и уходит с записи на следующую.
А если повесить что на AfterRowColChange, то может быть так, к примеру:
А=5, С=10, В=15, дальше пользователь меняет, к примеру С=20 - и что дальше ? А<=C<=B - ошибка ? или он хочет продолжить редакрирование ?
Примеров может быть масса. Вообщем хотелось бы отловить событие окончания редактирования записи. Вообщем, еcли кто знаком с Access, там есть событие AfterUpdate для формы, хотелось бы такое для Grid-a.

Ну это просто, для таких задач используют правила поля

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
CREATE CURSOR test (A i CHECK A < B ERROR 'Error A > B' DEFAULT  1 , ;
B i CHECK c <= b AND a <= c  ERROR 'c > b AND a > c' DEFAULT  20 , ;
C i CHECK  c =  10  OR c =  20  OR c =  30  ERROR 'C # 10,20,30' DEFAULT  10 )

APPEND BLANK 

UPDATE test SET a =  21  
UPDATE test SET b =  0  
UPDATE test SET c =  21  
...
Рейтинг: 0 / 0
Как реализовать событие типа AfterUpdate в Grid-e для записи ?
    #33968753
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PaulWistНу это просто, для таких задач используют правила поля
В общем случае не Rule поля, а Rule уровня записи, поскольку заранее неизвестно в каком порядке будут заполняться поля.

Например, если стоит условие A<B, то ни в коем случае нельзя заполнять поле "A" до того, как будет заполнено поле "B". Но в общем случае этого гарантировать невозможно.

Также можно делать такую проверки в триггерах на вставку и обновление. Отличие в том, что RULE будет срабатывать и при изменении в буфере таблицы, а триггер только в момент собственно записи.
...
Рейтинг: 0 / 0
Как реализовать событие типа AfterUpdate в Grid-e для записи ?
    #33968762
SergeyVZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может оно и просто, но где это все должно работать ? И если это не база, а просто набор разбросанных таблиц и эти А,В,С, это ключи никак не связанных таблиц, тогда опять чего то искать.
Видать выражаюсь не совсем понятно. Попробую проще: в Grid-e есть событие BefoRowColChange, которое реагирует на смену и столбца и строки, а я хочу событие ну типа BefoRowChange, т.е. такое, которое будет реагировать ТОЛЬКО на смену строки. Можно такое сделать ?
...
Рейтинг: 0 / 0
Как реализовать событие типа AfterUpdate в Grid-e для записи ?
    #33968806
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У Grid есть свойство RowColChange, которое показывает какое было перемещение - по строкам или по столбцам. Вот внутри BeforRowColChange() и анализируй.

Только не спрашивай "почему у меня его нет". Версию FoxPro надо писать.

Кроме того, поскольку ты не даешь ВСЮ постановку задачи, а только то как ТЫ видишь ее решение, то ничего вразумительного в ответ не получишь. Диалог имеет вид:

- Сделай вот так
- Я так не могу, потому что у меня вот этого нет
- Ну, сделай вот так
- Я так не могу, потому что мне этого нельзя

Так приведи ПОЛНОСТЬЮ что у тебя есть, что надо получить и ЗАЧЕМ.
...
Рейтинг: 0 / 0
Как реализовать событие типа AfterUpdate в Grid-e для записи ?
    #33968846
SergeyVZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВладимирМ
В общем случае не Rule поля, а Rule уровня записи, поскольку заранее неизвестно в каком порядке будут заполняться поля.

Например, если стоит условие A<B, то ни в коем случае нельзя заполнять поле "A" до того, как будет заполнено поле "B". Но в общем случае этого гарантировать невозможно.


Вот именно мне и надо Rule уровня записи. А в VFP 5.0 это можно как-то сделать, если базы как таковой нет, а просто есть набор таблиц ?
...
Рейтинг: 0 / 0
Как реализовать событие типа AfterUpdate в Grid-e для записи ?
    #33968887
-=AlexiS=-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Конечно лучше положить таблицу в базу и навесить проверки на тригера или на правила записи.
Для VFP9 можно пользовать RowColChange.
********
Ну ежели на базу проверки перенести нельзя, и версия фокса старая
то делаем так :

создаем свойство формы sRID
в него мы будем запоминать значение идентификатора записи или если его нет то Recno() и инициируем его несуществующим значением.

в AfteRowСolChange пишем

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
if thisform.sRID<>table1.Id
  thisform.sRID=table1.Id
  * сменилась запись
  * делаем проверки
else
  * ничего не делаем двигались по столбцам
endif


кстати я таким способом продолжаю пользоваться и в 9,
поскольку RowColChange после рефреша сбрасывается в 0, что не всегда есть хорошо.
...
Рейтинг: 0 / 0
Как реализовать событие типа AfterUpdate в Grid-e для записи ?
    #33968928
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВладимирМ PaulWistНу это просто, для таких задач используют правила поля
В общем случае не Rule поля, а Rule уровня записи, поскольку заранее неизвестно в каком порядке будут заполняться поля.


В данном примере "общий случай" разбивается на два
1. Модификация данных командами update, insert
2. Модификация интерактивно.

Так вот, правило поля будет срабатывать только при переходе на др. запись при интерактивном режиме, те ошибку будем получать тогда , когда заполнили все поля.

Поэтому твою фразу надо переписать

В общем случае Rule поля И Rule уровня записи.
...
Рейтинг: 0 / 0
Как реализовать событие типа AfterUpdate в Grid-e для записи ?
    #33969101
SergeyVZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все! Для себя, все что хотел, я понял. Всем огромное спасибо за помощь !
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как реализовать событие типа AfterUpdate в Grid-e для записи ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]