:: Visual Foxpro, Foxpro for DOS
определить изменялась ли запись
vodaic
Автор

Сообщений: 188
Откуда: Киев, Украина
Дата регистрации: 24.02.2009
Подскажите, пож, как определить, корректировалась ли запись таблицы dbf в текущем сеансе работы с этой таблицей?
Спасибо!
Ratings: 0 negative/0 positive
Re: определить изменялась ли запись
PaulWist

Сообщений: 14618
Дата регистрации: 01.04.2004
GETFLDSTATE(cFieldName | nFieldNumber [, cTableAlias | nWorkArea])


------------------
Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)
Ratings: 0 negative/0 positive
Re: определить изменялась ли запись
ssa

Сообщений: 13007
Откуда: Москва
Дата регистрации: 23.03.2005
vodaic
корректировалась ли запись таблицы dbf в текущем сеансе работы с этой таблицей?
И что понимается под словом "сеанс"?

------------------
Лень - это неосознанная мудрость.
Ratings: 0 negative/1 positive
Re: определить изменялась ли запись
of63

Сообщений: 25254
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
Если программа (сеанс?) никак не отмечает в записи таблички факт изменения записи, то никак не узнать. Дата/время файла таблички есть правда, и ее размер...
Ratings: 0 negative/0 positive
Re: определить изменялась ли запись
vodaic
Автор

Сообщений: 188
Откуда: Киев, Украина
Дата регистрации: 24.02.2009
ssa
vodaic
корректировалась ли запись таблицы dbf в текущем сеансе работы с этой таблицей?
И что понимается под словом "сеанс"?

Начинается "сеанс" оператором USE ... Входим в работу с таблицей. Потом таблица закрывается (USE in... или Close Tables All. Если в этом промежутке времени запись таблицы изменилась, отреагировать на такое состояние.
Вот так примерно выглядит потребность...
Ratings: 0 negative/0 positive
Re: определить изменялась ли запись
vodaic
Автор

Сообщений: 188
Откуда: Киев, Украина
Дата регистрации: 24.02.2009
PaulWist
GETFLDSTATE(cFieldName | nFieldNumber [, cTableAlias | nWorkArea])

Спасибо! Этот вариант конструктивен. Но, может еще имеются варианты?
Ratings: 0 negative/0 positive
Re: определить изменялась ли запись
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Этот вариант (с GETFLDSTATE, и заодно с GETNEXTMODIFIED - чтобы найти собственно изменённые записи, прежде чем смотреть какие поля там изменены) будет работать только если:
1) Таблица будет переведена в 5-й режим буферизации (сразу после открытия, к примеру).
2) До момента "проверки на изменения" данные НЕ будут сохранятся командой TABLEUPDATE().
3) Естественно, перед закрытием такую буферизованную таблицу нужно "записать" той самой командой TABLEUPDATE - проверив что она успешно отработала (некоторые правила работают только в момент "сохранения", а не в момент "ввода изменений").
Про буферизацию в хелпе написано достаточно подробно. Дополнительно надо смотреть функции CURVAL и OLDVAL - первая важна если таблица используется несколькими копиями программы (чтобы увидеть изменения сделанные другими пользователями). Вторая показывает собственно "старое значение" для указанного поля или выражения.


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: определить изменялась ли запись
akvvohinc

Сообщений: 4219
Откуда: Москва
Дата регистрации: 11.11.2008
vodaic
Начинается "сеанс" оператором USE ... Входим в работу с таблицей. Потом таблица закрывается (USE in... или Close Tables All. Если в этом промежутке времени запись таблицы изменилась, отреагировать на такое состояние.
Осталось непонятным:
1) Что вы называете изменением записи? Изменение значения в каком-либо поле? Или любая запись в любое поле пусть даже того же самого значения? Добавление/удаление записи - это изменение?
2) О какой записи таблицы речь? О любой, то есть, хотя бы одной?
3) Интересуют физические изменения в самом файле dbf на диске или изменения, не сохраненные еще на диске, это тоже изменения?
4) В какой момент надо реагировать? Один раз после окончания сеанса? При каждом изменении записи в процессе работы с таблицей?
Ratings: 0 negative/0 positive
Re: определить изменялась ли запись
vnkor

Сообщений: 324
Дата регистрации: 04.10.2007
vodaic
Подскажите, пож, как определить, корректировалась ли запись таблицы dbf в текущем сеансе работы с этой таблицей?
А в чем, собственно, проблема?
Ratings: 0 negative/0 positive
Re: определить изменялась ли запись
spinz

Сообщений: 5263
Дата регистрации: 21.01.2016
Скажу по секрету - записи в таблице не могут меняться в принципе, они статичные. Это иллюзия, что СУБД что-то там может писать в таблицы.

Но лучше не обсуждать этот вопрос
Ratings: 0 negative/0 positive
Re: определить изменялась ли запись
vodaic
Автор

Сообщений: 188
Откуда: Киев, Украина
Дата регистрации: 24.02.2009
Igor Korolyov
Этот вариант (с GETFLDSTATE, и заодно с GETNEXTMODIFIED - чтобы найти собственно изменённые записи, прежде чем смотреть какие поля там изменены) будет работать только если:
1) Таблица будет переведена в 5-й режим буферизации (сразу после открытия, к примеру).
2) До момента "проверки на изменения" данные НЕ будут сохранятся командой TABLEUPDATE().
3) Естественно, перед закрытием такую буферизованную таблицу нужно "записать" той самой командой TABLEUPDATE - проверив что она успешно отработала (некоторые правила работают только в момент "сохранения", а не в момент "ввода изменений").
Про буферизацию в хелпе написано достаточно подробно. Дополнительно надо смотреть функции CURVAL и OLDVAL - первая важна если таблица используется несколькими копиями программы (чтобы увидеть изменения сделанные другими пользователями). Вторая показывает собственно "старое значение" для указанного поля или выражения.

Спасибо! Здесь есть чему поучиться в смысле образовавшейся надобности.
Ratings: 0 negative/0 positive
Re: определить изменялась ли запись
vodaic
Автор

Сообщений: 188
Откуда: Киев, Украина
Дата регистрации: 24.02.2009
[quote akvvohinc][quote vodaic]Начинается "сеанс" оператором USE ... Входим в работу с таблицей. Потом таблица закрывается (USE in... или Close Tables All. Если в этом промежутке времени запись таблицы изменилась, отреагировать на такое состояние.[/quote]
Осталось непонятным:
[quote]
1) Что вы называете изменением записи? Изменение значения в каком-либо поле? Или любая запись в любое поле пусть даже того же самого значения? Добавление/удаление записи - это изменение?[/quote]
Изменение значения двух-трех полей по указанию. Добавление записи - тоже изменение
[quote]
2) О какой записи таблицы речь? О любой, то есть, хотя бы одной?[/quote]
О любой изменившейся (добавленной) записи
[quote]
3) Интересуют физические изменения в самом файле dbf на диске или изменения, не сохраненные еще на диске, это тоже изменения?[/quote]
И те, и другие, если после закрытия таблицы выполненные изменения будут отражены в dbf-фвйле.

[quote]
4) В какой момент надо реагировать? Один раз после окончания сеанса? При каждом изменении записи в процессе работы с таблицей?[/quote]

Идеально было бы так. Открывается таблица. В ней производятся действия, приводящие к изменениям в некоторых подях некоторых записей. Потом, до закрытия таблицы, просматриваются ее записи и те, которые подверглись изменениям, как-то идентифицируются, например, создается файл, содержащий значение какого-то ключевого поля записи (некоторый код) и дата его изменения.
Ratings: 0 negative/0 positive
Re: определить изменялась ли запись
vodaic
Автор

Сообщений: 188
Откуда: Киев, Украина
Дата регистрации: 24.02.2009
vnkor
vodaic
Подскажите, пож, как определить, корректировалась ли запись таблицы dbf в текущем сеансе работы с этой таблицей?
А в чем, собственно, проблема?

Требуется где-то сохранить информацию о том, что такая-то запись таблицы сегодня подверглась изменениям, приемлемо вести некоторый файл изменения в записях по датам, например.
Ratings: 0 negative/0 positive
Re: определить изменялась ли запись
PaulWist

Сообщений: 14618
Дата регистрации: 01.04.2004
То есть нужен журнал изменеий?
Тогда для этих целей надо использовать триггеры на Insert, Update, Delete, куда писать лог в файл или таблицы, это дело десятое, но лучше в таблицы лога.


------------------
Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)
Ratings: 0 negative/1 positive
Re: определить изменялась ли запись
of63

Сообщений: 25254
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
> Требуется где-то сохранить информацию о том, что такая-то запись таблицы сегодня подверглась изменениям...
Перед использованием таблицы можно сделать ее копию, по окончании использования (или во время) - сравнить с копией (тривиальная програмка), не пристраивая никакие настоящие БД-шные "механизмы"...
Ratings: 1 negative/0 positive
Re: определить изменялась ли запись
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
vodaic
Требуется где-то сохранить информацию о том, что такая-то запись таблицы сегодня подверглась изменениям, приемлемо вести некоторый файл изменения в записях по датам, например.
Тогда стоит поместить таблицы в контейнер БД (если они ещё не находятся там), и создать для таблицы триггера. Это будет работать независимо от "прикладного" кода (т.е. по сути ничего в самой программе работающей с этой таблицей менять не потребуется), и (если аккуратно написать сами эти триггера) даже при работе из других программ, в т.ч. и через ODBC/OLEDB из нефоксовых программ.
Вообще конкретно для целей аудита даже была написана специальная система FoxAudit. Я, конечно, не призываю её покупать, но изучить принцип работы и сделать своё, аналогичное - вполне хороший вариант будет.


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: определить изменялась ли запись
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
of63
Перед использованием таблицы можно сделать ее копию, по окончании использования (или во время) - сравнить с копией
На редкость корявый и убогий вариант, однако...


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: определить изменялась ли запись
spinz

Сообщений: 5263
Дата регистрации: 21.01.2016
Igor Korolyov
of63
Перед использованием таблицы можно сделать ее копию, по окончании использования (или во время) - сравнить с копией
На редкость корявый и убогий вариант, однако...

Тащемта copy-on-write, если говрить не о таблицах, а о страницах
Ratings: 0 negative/0 positive
Re: определить изменялась ли запись
of63

Сообщений: 25254
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
Igor Korolyov
of63
Перед использованием таблицы можно сделать ее копию, по окончании использования (или во время) - сравнить с копией
На редкость корявый и убогий вариант, однако...

> Тогда стоит поместить таблицы в контейнер БД (если они ещё не находятся там), и создать для таблицы триггера.
А твой путь прямой и светлый, ага, взять рабочую прогу с рабочими таблицами, и так побырому "поместить в конейнер БД", "создать триггера". Как в учебнике по созданию БД?
Ratings: 0 negative/0 positive
Re: определить изменялась ли запись
ssa

Сообщений: 13007
Откуда: Москва
Дата регистрации: 23.03.2005
Боже мой, оказывается поместить таблицу в контейнер для кого - путь тернистый и темный. А уж с добавлением триггеров вообще хана...


------------------
Лень - это неосознанная мудрость.
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 20 (Гостей: 20)

© 2000-2024 Fox Club 
Яндекс.Метрика