powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Отловить факт изменения данных в таблице
3 сообщений из 3, страница 1 из 1
Отловить факт изменения данных в таблице
    #35592775
gotko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
как отловить, что данные в таблице были изменены пользователем при просмотре этой таблицы через форму в гриде. Нужно, чтобы при закрытии формы анализировались данные на предмет изменений и предлагалось записать в случае, если данные менялись. Я использую дублирующие поля - старое значение-новое значение и если при закрытии формы старое<>новому то было изменение. Но как-то это не удобно...Можно на interactivechange в контроле повесить зажигание флага, но если поменялось, а потом вернулось старое значение, этот способ не прокатывает- все равно даст изменение...
Может есть какой другой способ, типа встроенной переменной в самом фоксе, которая отслеживает изменение данных по таблице или еще что-то?
Буду благодарен за подсказку...
...
Рейтинг: 0 / 0
Отловить факт изменения данных в таблице
    #35592979
12345зайчик
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторМожет есть какой другой способ, типа встроенной переменной в самом фоксе, которая отслеживает изменение данных по таблице или еще что-то?

в фокспро есть буферизация

(на пальцах)
работает так:

- к примеру есть постоянная таблица
- перед началом ред-я забираем какую-то часть данных(записей) в буфер
(лучший инструмент для этого - курсорадаптер)
- после того как потрогали можем либо сохранить, внесенные изм-я, либо нет

факт изм-я данных смотрим функциями
gtnextmodified, getfldstate, oldval ...
...
Рейтинг: 0 / 0
Отловить факт изменения данных в таблице
    #35594614
DMITRY_PEREDISTY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Можно завести еще одно поле для хранения контрольной сумме по записи
Например для таблицы с полями ID I , NAME C(35), DATE D добавьте еще поле KS C(20)

* Сохранение записи
Replace ID With 1, NAME With 'Вася', DATE With date()
* Сохранение контрольной суммы
Replace KS With KSUM(ID,NAME,DATE)
*
*
Через три дня проверяем
SCAN
if KS <> KSUM(ID,NAME,DATE) .and. messagebox('запись изменена!',33,'Мочить?') = 1
delete
endif
ENDSCAN

Волшебная функция ниже, полей может быть много.
* расчет контрольной суммы по записи
function KSUM
lparam p1, p2 , p3, p4, p5, p6 ,p7 ,p8 ,p9 ,p10, p11, p12, p13

local m.KOL_PARAM, i , s , makro
m.KOL_PARAM = parameters()

s=''
for i=1 to m.KOL_PARAM
makro = 'p'+alltrim(str(i))
m.TYPE = TYPE(makro)
do case
case m.TYPE = 'C'
s = s + &makro
case m.TYPE = 'N'
s = s + alltrim(str(&makro))
case m.TYPE = 'D'
s = s + dtos(&makro)
case m.TYPE = 'T'
s = s + tran(&makro)
endcase
endfor

RETURN int(VAL(SYS(2007,s)))
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Отловить факт изменения данных в таблице
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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