|
|
|
Время последней модификации записи в таблицах VFP
|
|||
|---|---|---|---|
|
#18+
Интересно, можно ли на основе тригеров, или как либо еще, сохранять дату-время последней модификации записи в таблицах VFP? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.08.2006, 23:41 |
|
||
|
Время последней модификации записи в таблицах VFP
|
|||
|---|---|---|---|
|
#18+
а что тут сложного - дополнительное поле в таблице и при модификации заносить туда время. например поле timemod типа Charaster при модификации replace timemod with time() ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2006, 09:01 |
|
||
|
Время последней модификации записи в таблицах VFP
|
|||
|---|---|---|---|
|
#18+
Мне кажется для хранения даты и времени модификации лучше использовать поле типа DATETIME (replace timemod with datetime()) С уважением, Алексей ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2006, 09:05 |
|
||
|
Время последней модификации записи в таблицах VFP
|
|||
|---|---|---|---|
|
#18+
Только это делаетсе не через триггер, а через правило (RULE) уровня записи. В FoxPro в теле триггера недопустимо модифицировать ту таблицу, триггер которой и выполняется. Т.е. создаешь хранимую процедуру, например Код: plaintext 1. 2. 3. Здесь я предполагаю, что твоя таблица имеет поле LastModify типа Date или DateTime И в RULE уровня записи (в режиме модификации таблицы закладка Table, группа Record Validation) указываешь эту функцию Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2006, 10:49 |
|
||
|
Время последней модификации записи в таблицах VFP
|
|||
|---|---|---|---|
|
#18+
Спасибо. Почему то думал, что и Rule тож нельзя запись изменять. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.08.2006, 16:42 |
|
||
|
Время последней модификации записи в таблицах VFP
|
|||
|---|---|---|---|
|
#18+
Еще вопрос, походу возникший, для полного счастья надо еще иметь возможность отслеживать дату удаления записи, можно ли? RULE - при удалении не срабатывает, тригер - нельзя... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2006, 11:06 |
|
||
|
Время последней модификации записи в таблицах VFP
|
|||
|---|---|---|---|
|
#18+
ВладимиrЕще вопрос, походу возникший, для полного счастья надо еще иметь возможность отслеживать дату удаления записи, можно ли? RULE - при удалении не срабатывает, тригер - нельзя... Нет. Нельзя. На уровне базы данных в самой таблице это не решается. Единственное решение - это отдельная таблица-лог. В триггере на удаление делается запись в эту таблицу (писать в другую таблицу в теле триггера можно, если это не вызовет рекурсию). Собственно, это логично. Ведь удаленная запись означает "не существующая". Какая модификация может быть для "не существующей" записи? Вот такие "фиктивные" модификаци и не отслеживаются. Тем более, запись может быть физически удалена после PACK и информация об удалении будет окончательно потеряна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2006, 11:20 |
|
||
|
Время последней модификации записи в таблицах VFP
|
|||
|---|---|---|---|
|
#18+
До сего момента, именно внешние таблицы я и использовал. Т.е. задача - синхронизация удаленных баз. Во время работы с базой все изменения сохраняются в отдельных таблицах, с пометкой что сделали с записью (добавили, изменили, удалили), которые в последствии передаются на удаленную БД, где и происходит их обработка и наоборот. При слиянии обрабатываются конфликтные ситуации, и в идеале, имеем две идентичные базы. C использованием RULE, можно было бы избежать ведения логов во внешних таблицах. Т.е. при необходимости можно выгрузить SELECT`ом все измененные записи за определенный период времени и все. Но остается обработка удаленных записей, именно поэтому PACK в проекте использую очень осторожно. Вот думаю еще посмотреть возможность повторного использования удаленных записей. Но скорее всего на уровне ХП решить проблему вряд ли удастся... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.08.2006, 20:39 |
|
||
|
Время последней модификации записи в таблицах VFP
|
|||
|---|---|---|---|
|
#18+
То, что тебе надо, официально называется "репликация". Поищи на этом форуме по этому ключевому слову. Тема многократно обсуждалась. По твоим выводам: RULE - не спасет "отца русской демократии". Часы на разных компьютерах не синхронизированы. Самое большее, что ты сможешь сделать через RULE - это отметить сам факт модификации через логическое поле (в момент репликации ставишь .T., при любой модификации .F.). Но ведь надо знать еще и что именно было изменено При использовании логов, тоже можно выгрузить все Select-ом (INNER JOIN). Кроме того, одного Select, в общем случае, недостаточно. Задача репликации много сложней. Требуется проверить слишком много всего и разного. Использование записей, ранее помеченных как удаленные - создание себе дикой головной боли. В принципе, возможно, но "безумным" программированием с отказом от многих "штатных" процедур, команд и функций собственно FoxPro. Например, невозможно использовать команды INSERT-SQL, APPEND BLANK, APPEND FROM. Они ведь не обращают внимание на факт наличия записей помеченных как удаленные. Значит, придется писать "обертку" на эти команды, значит, триггера, правила, дефолты - "в пролете". По сути, это возврат к DOS-программированию. Создание своей собственной идеологии базы данных. Никакого контроля на уровне данных. Весь контроль на уровне программного кода. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2006, 13:59 |
|
||
|
Время последней модификации записи в таблицах VFP
|
|||
|---|---|---|---|
|
#18+
ВладимирМТо, что тебе надо, официально называется "репликация". Не поверишь. :) Про репликацию я в курсе и еще про "оторванные " представления... С RULE вот только как-то не хорошо получилось... :) Тема обсуждалась, читал, может что то и пропустил. Вроде бы на 100% ни чего не подходит. Если в двух словах, то: Несколько рабочих мест, территориально разнесенных, из возможной связи - только модем. Сейчас все работает на основе триггеров, изменяемая запись копируется в отдельную таблицу с пометкой что с не сделали (удалили, добавили, изменили). Потом этими таблицами обмениваюся... Ну я вроде бы писал... Хотелось бы построить что-то типа следующего: К серверу подключаются рабочие станции, копируют на него свои измененные записи за период с момента последнего обмена и забирают изменения за необходимый период времени... Наверно с REMOTE COM... Хорошо бы что б все автоматически... ВладимирМRULE - не спасет "отца русской демократии". Часы на разных компьютерах не синхронизированы. Время, в данном случае не очень важно, плюс-минус несколько минут. Работает принцип - "кто последний тот и прав" ВладимирМЗадача репликации много сложней. Требуется проверить слишком много всего и разного. Проверяю, кажись ни чего не пропустил... ВладимирМНо ведь надо знать еще и что именно было изменено Думаю, не важно. Лишь бы не ключевое поле... :) ВладимирМИспользование записей, ранее помеченных как удаленные - создание себе дикой головной боли. Да. Наверно погорячился.... Лучше уж логи... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.08.2006, 23:41 |
|
||
|
|

start [/forum/topic.php?fid=41&msg=33911119&tid=1590998]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
153ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
41ms |
get tp. blocked users: |
1ms |
| others: | 254ms |
| total: | 486ms |

| 0 / 0 |
