![]() |
|
|
![]()
|
|
| Lunatikus |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 503 Регистрация: 29.6.2007 Репутация: 1 Всего: 6 |
Здравствуйте.Требуется периодически проверять,обновились ли данные в таблице table1, и если обновились-передать обновленные/добавленные записи.Постоянно делать запрос поля и сверять его с имеющимся набором данных-выход.Но единственно-правильный ли?
база MS SQL 2000. -------------------- TheSin - небольшое игровое сообщество взрослых и молодых(L2,WoW,Aion,RFonline and other not mmorpg,not computer games). сайт гильдии |
|||
|
||||
| ТоляМБА |
|
|||
![]() Котэ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1607 Регистрация: 15.12.2004 Репутация: 3 Всего: 252 |
Есть така штука в MS-SQL 2000 - триггер. Ставишь его на Insert\Update\Delete и вперёд - в отдельную таблицу айдишники измененных записей пиши.
Добавлено через 53 секунды Ну и дату изменений конечно тоже желательно туда скидывать |
|||
|
||||
| Lunatikus |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 503 Регистрация: 29.6.2007 Репутация: 1 Всего: 6 |
хм,а как узнать,какая запись была изменена,добавлена,удалена?т.е. что писать в самом тригере?Сам текст не надо,просто операторы,которые нужны для определения измененных данных в таблице.пока почитаю пр отригеры подробнее-может,там это написано как раз.
-------------------- TheSin - небольшое игровое сообщество взрослых и молодых(L2,WoW,Aion,RFonline and other not mmorpg,not computer games). сайт гильдии |
|||
|
||||
| X-Vlad |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 570 Регистрация: 10.4.2002 Где: Украина, Львов Репутация: 3 Всего: 5 |
добавь в таблицы поля "mod_date", "create_date" типа datetime повесь в тригерах изменение даных полей. В апликации сохраняй последнюю дату которую ты брал и при новой проверке вибирай записи в которых
будут тебе выбиратся только новые и измененные записи. для удалленых записей зделай отдельную таблицу... в тригер удаления напиши код который будет вставлять в таблицу например "notification_delete_table" название таблицы в которой удалена запись и даные из этой записи (если тебе эти данные нужны). Это сообщение отредактировал(а) X-Vlad - 29.1.2008, 11:33 |
|||
|
||||
| Lunatikus |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 503 Регистрация: 29.6.2007 Репутация: 1 Всего: 6 |
добавлять эти поля во всех таблицах,которые надо проверять на обновление?ОМГ...там записей может быть больше 1млн.
Прочитал чтото как раз про такие таблицы системные:delete,insert.Они доступны во время выполнения триггера и в них как раз записываются вставленные записи,удаленные записи.Измененные пишутся сначала как удаленные со старыми данными,а в инсерт вставляется запись,как она будет выглядить после изменения.Только не попробовал еще на практике. -------------------- TheSin - небольшое игровое сообщество взрослых и молодых(L2,WoW,Aion,RFonline and other not mmorpg,not computer games). сайт гильдии |
|||
|
||||
| X-Vlad |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 570 Регистрация: 10.4.2002 Где: Украина, Львов Репутация: 3 Всего: 5 |
да, добавить два поля. Непойму причем здесь количество записей??? хоть 10 млн... защет этих полей ты будешь вытягивать несколько записей.. (новые или изменненые)
они доступны только в текущей сесии.. тоесть в тригерах.. после того как транзакция закроется ты там ничего неувидишь. Это сообщение отредактировал(а) X-Vlad - 29.1.2008, 13:11 |
||||||
|
|||||||
| Lunatikus |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 503 Регистрация: 29.6.2007 Репутация: 1 Всего: 6 |
а мне надо больше?я во время срабатывания триггера просто буду измененные данные передавать на клиент.Больше мне не требуется,в принципе. -------------------- TheSin - небольшое игровое сообщество взрослых и молодых(L2,WoW,Aion,RFonline and other not mmorpg,not computer games). сайт гильдии |
|||
|
||||
| X-Vlad |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 570 Регистрация: 10.4.2002 Где: Украина, Львов Репутация: 3 Всего: 5 |
интересно как ты изх будешь передавать в интербейсе конечно с этим проще.. потому что есть notification и их можна отлавливать в программе без особых усилий.. но в MS SQL технология notification намного сложней.. и надо будет хорошенько повозится чтобы реализовать. Это сообщение отредактировал(а) X-Vlad - 29.1.2008, 14:32 |
||||
|
|||||
| Lunatikus |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 503 Регистрация: 29.6.2007 Репутация: 1 Всего: 6 |
Ну вот пока мои примерные мысли:
Допустим,сработал триггер на вставку новой записи:в таблице insert в это время появилась эта запись.Что мне мешает ее данные забрать в этот момент и передать на клиент? Т.е. в самом триггере написать запрос на выборку из таблицы insert записей и перекинуть их в #temp.Потом отдельным запросом клиент сможет получить эти данные. Это сообщение отредактировал(а) Lunatikus - 29.1.2008, 14:42 -------------------- TheSin - небольшое игровое сообщество взрослых и молодых(L2,WoW,Aion,RFonline and other not mmorpg,not computer games). сайт гильдии |
|||
|
||||
| X-Vlad |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 570 Регистрация: 10.4.2002 Где: Украина, Львов Репутация: 3 Всего: 5 |
временные таблицы хранятся только в текущей сесии.. и если ты создаш в тригере эту таблицу то после выполнения тригера она удалится так как транзакция закроется. зделай в программе отдельный поток и в нем с некоторым интервалом запускай скрипт для выборки новых/изменненых данных. после чего делай нужну обработку и т.д. |
|||
|
||||
| Lunatikus |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 503 Регистрация: 29.6.2007 Репутация: 1 Всего: 6 |
мм,тогда буду заносить эти новые записи и измененные в отдельную таблицу,не временную.И оттуда периодически буду выбирать.Так?
-------------------- TheSin - небольшое игровое сообщество взрослых и молодых(L2,WoW,Aion,RFonline and other not mmorpg,not computer games). сайт гильдии |
|||
|
||||
| X-Vlad |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 570 Регистрация: 10.4.2002 Где: Украина, Львов Репутация: 3 Всего: 5 |
создай таблицу и заноси туда для изменненых или добавленных даных название таблицы где это произошло, а потом выбирай из измененной таблицы по create_date и mod_date так ты получишь новые данные + лучший performance. в туже таблицу можешь заносить название таблицы где были удалены данные просто в отдельном поле ставь ключ который тебе покажет что в даной таблице даные были удалены. З.Ы. незабудь очищать эту таблицу после того как ты взял данные. Чтобы не дублировать... |
|||
|
||||
| Lunatikus |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 503 Регистрация: 29.6.2007 Репутация: 1 Всего: 6 |
Так получается,что мне надо постоянно обновлять данные этих двух полей в исследуемых таблицах+заносить результаты обновления в еще одну таблицу.Тогда не рпоще ли периодически проверять прямо исследуемые таблицы на предмет соответствия create_date и mod_date ?Зачем в таком случае еще одна таблица?туплю к вечеру ближе...
-------------------- TheSin - небольшое игровое сообщество взрослых и молодых(L2,WoW,Aion,RFonline and other not mmorpg,not computer games). сайт гильдии |
|||
|
||||
| X-Vlad |
|
||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 570 Регистрация: 10.4.2002 Где: Украина, Львов Репутация: 3 Всего: 5 |
Маленькая поправочка. Временные таблицы живут в рамках сесии после утери конета они удаляются автоматом. А в рамках транзакции живут table variable. Немного лоханулся.. но все равно тебе надо использовать физическую таблицу.
Добавлено через 5 минут и 32 секунды
создаешь поле "MOD_DATE DATETIME DEFAULT GETDATE()" єто поле будет автоматом заполнятся при изменении таблицы. ты только заполняешь поле create_date.
ты создаешь таблицу где сохраняються название таблиц которые изменились чтобы непереберать все таблицы в твоей базе на наличие изменений! Подумай о перфомансе. Ну конечно если у тебя одна таблица то тогда ненадо |
||||||
|
|||||||
| Lunatikus |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 503 Регистрация: 29.6.2007 Репутация: 1 Всего: 6 |
пока одна.Потом кто знает.Пользователю сколько не кодируй,он все на Windows смотрит. Добавлено через 25 секунд спасибо за помощь! -------------------- TheSin - небольшое игровое сообщество взрослых и молодых(L2,WoW,Aion,RFonline and other not mmorpg,not computer games). сайт гильдии |
|||
|
||||
![]()
|
| Правила форума "Delphi: Базы данных и репортинг" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами Обязательно указание: 1. Базы данных (Paradox, Oracle и т.п.) 2. Способа доступа (ADO, BDE и т.д.)
FAQ раздела лежит здесь! Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |