powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Время последней модификации записи в таблицах VFP
10 сообщений из 10, страница 1 из 1
Время последней модификации записи в таблицах VFP
    #33909443
Владимиr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Интересно, можно ли на основе тригеров, или как либо еще, сохранять дату-время последней модификации записи в таблицах VFP?
...
Рейтинг: 0 / 0
Время последней модификации записи в таблицах VFP
    #33909642
S866
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а что тут сложного - дополнительное поле в таблице и при модификации заносить туда время.

например поле timemod типа Charaster

при модификации

replace timemod with time()
...
Рейтинг: 0 / 0
Время последней модификации записи в таблицах VFP
    #33909645
Фотография Aleksey-K
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне кажется для хранения даты и времени модификации лучше использовать поле типа DATETIME (replace timemod with datetime())
С уважением, Алексей
...
Рейтинг: 0 / 0
Время последней модификации записи в таблицах VFP
    #33909864
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Только это делаетсе не через триггер, а через правило (RULE) уровня записи.

В FoxPro в теле триггера недопустимо модифицировать ту таблицу, триггер которой и выполняется.

Т.е. создаешь хранимую процедуру, например

Код: plaintext
1.
2.
3.
FUNCTION LastModify
REPLACE LastModify WITH DateTime()
RETURN .T.
ENDFUNC

Здесь я предполагаю, что твоя таблица имеет поле LastModify типа Date или DateTime

И в RULE уровня записи (в режиме модификации таблицы закладка Table, группа Record Validation) указываешь эту функцию

Код: plaintext
LastModify()
...
Рейтинг: 0 / 0
Время последней модификации записи в таблицах VFP
    #33911119
Владимиr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо. Почему то думал, что и Rule тож нельзя запись изменять.
...
Рейтинг: 0 / 0
Время последней модификации записи в таблицах VFP
    #33912496
Владимиr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Еще вопрос, походу возникший, для полного счастья надо еще иметь возможность отслеживать дату удаления записи, можно ли?
RULE - при удалении не срабатывает, тригер - нельзя...
...
Рейтинг: 0 / 0
Время последней модификации записи в таблицах VFP
    #33912577
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВладимиrЕще вопрос, походу возникший, для полного счастья надо еще иметь возможность отслеживать дату удаления записи, можно ли?
RULE - при удалении не срабатывает, тригер - нельзя...
Нет. Нельзя.

На уровне базы данных в самой таблице это не решается.

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

Собственно, это логично. Ведь удаленная запись означает "не существующая". Какая модификация может быть для "не существующей" записи? Вот такие "фиктивные" модификаци и не отслеживаются. Тем более, запись может быть физически удалена после PACK и информация об удалении будет окончательно потеряна.
...
Рейтинг: 0 / 0
Время последней модификации записи в таблицах VFP
    #33914315
Владимиr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
До сего момента, именно внешние таблицы я и использовал.

Т.е. задача - синхронизация удаленных баз. Во время работы с базой все изменения сохраняются в отдельных таблицах, с пометкой что сделали с записью (добавили, изменили, удалили), которые в последствии передаются на удаленную БД, где и происходит их обработка и наоборот.
При слиянии обрабатываются конфликтные ситуации, и в идеале, имеем две идентичные базы.
C использованием RULE, можно было бы избежать ведения логов во внешних таблицах. Т.е. при необходимости можно выгрузить SELECT`ом все измененные записи за определенный период времени и все. Но остается обработка удаленных записей, именно поэтому PACK в проекте использую очень осторожно.
Вот думаю еще посмотреть возможность повторного использования удаленных записей. Но скорее всего на уровне ХП решить проблему вряд ли удастся...
...
Рейтинг: 0 / 0
Время последней модификации записи в таблицах VFP
    #33914598
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
То, что тебе надо, официально называется "репликация". Поищи на этом форуме по этому ключевому слову. Тема многократно обсуждалась.

По твоим выводам:

RULE - не спасет "отца русской демократии". Часы на разных компьютерах не синхронизированы. Самое большее, что ты сможешь сделать через RULE - это отметить сам факт модификации через логическое поле (в момент репликации ставишь .T., при любой модификации .F.). Но ведь надо знать еще и что именно было изменено

При использовании логов, тоже можно выгрузить все Select-ом (INNER JOIN). Кроме того, одного Select, в общем случае, недостаточно. Задача репликации много сложней. Требуется проверить слишком много всего и разного.

Использование записей, ранее помеченных как удаленные - создание себе дикой головной боли. В принципе, возможно, но "безумным" программированием с отказом от многих "штатных" процедур, команд и функций собственно FoxPro.

Например, невозможно использовать команды INSERT-SQL, APPEND BLANK, APPEND FROM. Они ведь не обращают внимание на факт наличия записей помеченных как удаленные. Значит, придется писать "обертку" на эти команды, значит, триггера, правила, дефолты - "в пролете".

По сути, это возврат к DOS-программированию. Создание своей собственной идеологии базы данных. Никакого контроля на уровне данных. Весь контроль на уровне программного кода.
...
Рейтинг: 0 / 0
Время последней модификации записи в таблицах VFP
    #33914782
Владимиr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВладимирМТо, что тебе надо, официально называется "репликация".

Не поверишь. :) Про репликацию я в курсе и еще про "оторванные " представления... С RULE вот только как-то не хорошо получилось... :)

Тема обсуждалась, читал, может что то и пропустил. Вроде бы на 100% ни чего не подходит. Если в двух словах, то:
Несколько рабочих мест, территориально разнесенных, из возможной связи - только модем.
Сейчас все работает на основе триггеров, изменяемая запись копируется в отдельную таблицу с пометкой что с не сделали (удалили, добавили, изменили). Потом этими таблицами обмениваюся... Ну я вроде бы писал... Хотелось бы построить что-то типа следующего: К серверу подключаются рабочие станции, копируют на него свои измененные записи за период с момента последнего обмена и забирают изменения за необходимый период времени... Наверно с REMOTE COM... Хорошо бы что б все автоматически...

ВладимирМRULE - не спасет "отца русской демократии". Часы на разных компьютерах не синхронизированы.

Время, в данном случае не очень важно, плюс-минус несколько минут. Работает принцип - "кто последний тот и прав"

ВладимирМЗадача репликации много сложней. Требуется проверить слишком много всего и разного.

Проверяю, кажись ни чего не пропустил...

ВладимирМНо ведь надо знать еще и что именно было изменено

Думаю, не важно. Лишь бы не ключевое поле... :)

ВладимирМИспользование записей, ранее помеченных как удаленные - создание себе дикой головной боли.

Да. Наверно погорячился.... Лучше уж логи...
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Время последней модификации записи в таблицах VFP
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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