определить изменялась ли запись | |
---|---|
vodaic Автор Сообщений: 188 Откуда: Киев, Украина Дата регистрации: 24.02.2009 |
Подскажите, пож, как определить, корректировалась ли запись таблицы dbf в текущем сеансе работы с этой таблицей?
Спасибо! |
Re: определить изменялась ли запись | |
---|---|
PaulWist Сообщений: 14618 Дата регистрации: 01.04.2004 |
------------------ Есть многое на свете, друг Горацио... Что и не снилось нашим мудрецам. (В.Шекспир Гамлет) |
Re: определить изменялась ли запись | |
---|---|
ssa Сообщений: 13007 Откуда: Москва Дата регистрации: 23.03.2005 |
И что понимается под словом "сеанс"? ------------------ Лень - это неосознанная мудрость. |
Re: определить изменялась ли запись | |
---|---|
of63 Сообщений: 25254 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
Если программа (сеанс?) никак не отмечает в записи таблички факт изменения записи, то никак не узнать. Дата/время файла таблички есть правда, и ее размер...
|
Re: определить изменялась ли запись | |
---|---|
vodaic Автор Сообщений: 188 Откуда: Киев, Украина Дата регистрации: 24.02.2009 |
Начинается "сеанс" оператором USE ... Входим в работу с таблицей. Потом таблица закрывается (USE in... или Close Tables All. Если в этом промежутке времени запись таблицы изменилась, отреагировать на такое состояние. Вот так примерно выглядит потребность... |
Re: определить изменялась ли запись | |
---|---|
vodaic Автор Сообщений: 188 Откуда: Киев, Украина Дата регистрации: 24.02.2009 |
Спасибо! Этот вариант конструктивен. Но, может еще имеются варианты? |
Re: определить изменялась ли запись | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Этот вариант (с GETFLDSTATE, и заодно с GETNEXTMODIFIED - чтобы найти собственно изменённые записи, прежде чем смотреть какие поля там изменены) будет работать только если:
1) Таблица будет переведена в 5-й режим буферизации (сразу после открытия, к примеру). 2) До момента "проверки на изменения" данные НЕ будут сохранятся командой TABLEUPDATE(). 3) Естественно, перед закрытием такую буферизованную таблицу нужно "записать" той самой командой TABLEUPDATE - проверив что она успешно отработала (некоторые правила работают только в момент "сохранения", а не в момент "ввода изменений"). Про буферизацию в хелпе написано достаточно подробно. Дополнительно надо смотреть функции CURVAL и OLDVAL - первая важна если таблица используется несколькими копиями программы (чтобы увидеть изменения сделанные другими пользователями). Вторая показывает собственно "старое значение" для указанного поля или выражения. ------------------ WBR, Igor |
Re: определить изменялась ли запись | |
---|---|
akvvohinc Сообщений: 4219 Откуда: Москва Дата регистрации: 11.11.2008 |
Осталось непонятным: 1) Что вы называете изменением записи? Изменение значения в каком-либо поле? Или любая запись в любое поле пусть даже того же самого значения? Добавление/удаление записи - это изменение? 2) О какой записи таблицы речь? О любой, то есть, хотя бы одной? 3) Интересуют физические изменения в самом файле dbf на диске или изменения, не сохраненные еще на диске, это тоже изменения? 4) В какой момент надо реагировать? Один раз после окончания сеанса? При каждом изменении записи в процессе работы с таблицей? |
Re: определить изменялась ли запись | |
---|---|
vnkor Сообщений: 324 Дата регистрации: 04.10.2007 |
А в чем, собственно, проблема? |
Re: определить изменялась ли запись | |
---|---|
spinz Сообщений: 5263 Дата регистрации: 21.01.2016 |
Скажу по секрету - записи в таблице не могут меняться в принципе, они статичные. Это иллюзия, что СУБД что-то там может писать в таблицы.
Но лучше не обсуждать этот вопрос |
Re: определить изменялась ли запись | |
---|---|
vodaic Автор Сообщений: 188 Откуда: Киев, Украина Дата регистрации: 24.02.2009 |
Спасибо! Здесь есть чему поучиться в смысле образовавшейся надобности. |
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] Идеально было бы так. Открывается таблица. В ней производятся действия, приводящие к изменениям в некоторых подях некоторых записей. Потом, до закрытия таблицы, просматриваются ее записи и те, которые подверглись изменениям, как-то идентифицируются, например, создается файл, содержащий значение какого-то ключевого поля записи (некоторый код) и дата его изменения. |
Re: определить изменялась ли запись | |
---|---|
vodaic Автор Сообщений: 188 Откуда: Киев, Украина Дата регистрации: 24.02.2009 |
Требуется где-то сохранить информацию о том, что такая-то запись таблицы сегодня подверглась изменениям, приемлемо вести некоторый файл изменения в записях по датам, например. |
Re: определить изменялась ли запись | |
---|---|
PaulWist Сообщений: 14618 Дата регистрации: 01.04.2004 |
То есть нужен журнал изменеий?
Тогда для этих целей надо использовать триггеры на Insert, Update, Delete, куда писать лог в файл или таблицы, это дело десятое, но лучше в таблицы лога. ------------------ Есть многое на свете, друг Горацио... Что и не снилось нашим мудрецам. (В.Шекспир Гамлет) |
Re: определить изменялась ли запись | |
---|---|
of63 Сообщений: 25254 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
> Требуется где-то сохранить информацию о том, что такая-то запись таблицы сегодня подверглась изменениям...
Перед использованием таблицы можно сделать ее копию, по окончании использования (или во время) - сравнить с копией (тривиальная програмка), не пристраивая никакие настоящие БД-шные "механизмы"... |
Re: определить изменялась ли запись | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Тогда стоит поместить таблицы в контейнер БД (если они ещё не находятся там), и создать для таблицы триггера. Это будет работать независимо от "прикладного" кода (т.е. по сути ничего в самой программе работающей с этой таблицей менять не потребуется), и (если аккуратно написать сами эти триггера) даже при работе из других программ, в т.ч. и через ODBC/OLEDB из нефоксовых программ. Вообще конкретно для целей аудита даже была написана специальная система FoxAudit. Я, конечно, не призываю её покупать, но изучить принцип работы и сделать своё, аналогичное - вполне хороший вариант будет. ------------------ WBR, Igor |
Re: определить изменялась ли запись | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
На редкость корявый и убогий вариант, однако... ------------------ WBR, Igor |
Re: определить изменялась ли запись | |
---|---|
spinz Сообщений: 5263 Дата регистрации: 21.01.2016 |
Тащемта copy-on-write, если говрить не о таблицах, а о страницах |
Re: определить изменялась ли запись | |
---|---|
of63 Сообщений: 25254 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
> Тогда стоит поместить таблицы в контейнер БД (если они ещё не находятся там), и создать для таблицы триггера. А твой путь прямой и светлый, ага, взять рабочую прогу с рабочими таблицами, и так побырому "поместить в конейнер БД", "создать триггера". Как в учебнике по созданию БД? |
Re: определить изменялась ли запись | |
---|---|
ssa Сообщений: 13007 Откуда: Москва Дата регистрации: 23.03.2005 |
Боже мой, оказывается поместить таблицу в контейнер для кого - путь тернистый и темный. А уж с добавлением триггеров вообще хана...
------------------ Лень - это неосознанная мудрость. |
© 2000-2024 Fox Club  |