Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Узнать,какие таблицы/данные обновились за период 
V
    Опции темы
Lunatikus
Дата 28.1.2008, 17:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 503
Регистрация: 29.6.2007

Репутация: 1
Всего: 6



Здравствуйте.Требуется периодически проверять,обновились ли данные в таблице table1, и если обновились-передать обновленные/добавленные записи.Постоянно делать запрос поля и сверять его с имеющимся набором данных-выход.Но единственно-правильный ли?
база MS SQL 2000.


--------------------
TheSin - небольшое игровое сообщество взрослых и молодых(L2,WoW,Aion,RFonline and other not mmorpg,not computer games).
сайт гильдии
PM MAIL   Вверх
ТоляМБА
Дата 29.1.2008, 06:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Котэ
***


Профиль
Группа: Завсегдатай
Сообщений: 1607
Регистрация: 15.12.2004

Репутация: 3
Всего: 252



Есть така штука в MS-SQL 2000 - триггер. Ставишь его на Insert\Update\Delete и вперёд - в отдельную таблицу айдишники измененных записей пиши.

Добавлено через 53 секунды
Ну и дату изменений конечно тоже желательно туда скидывать  smile 
PM   Вверх
Lunatikus
Дата 29.1.2008, 09:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 503
Регистрация: 29.6.2007

Репутация: 1
Всего: 6



хм,а как узнать,какая запись была изменена,добавлена,удалена?т.е. что писать  в самом тригере?Сам текст не надо,просто операторы,которые нужны для определения измененных данных в таблице.пока почитаю пр отригеры подробнее-может,там это написано как раз.


--------------------
TheSin - небольшое игровое сообщество взрослых и молодых(L2,WoW,Aion,RFonline and other not mmorpg,not computer games).
сайт гильдии
PM MAIL   Вверх
X-Vlad
Дата 29.1.2008, 11:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 570
Регистрация: 10.4.2002
Где: Украина, Львов

Репутация: 3
Всего: 5



добавь в таблицы поля "mod_date", "create_date" типа datetime повесь в тригерах изменение даных полей. В апликации сохраняй последнюю дату которую ты брал и при новой проверке вибирай записи в которых
Код

select * from ... where mod_date > your_last_check_date or create_date > your_last_check_date

будут тебе выбиратся только новые и измененные записи.

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

Это сообщение отредактировал(а) X-Vlad - 29.1.2008, 11:33


--------------------
Хорошая штука - комп..:)
www.x-vlad.com
PM MAIL WWW ICQ   Вверх
Lunatikus
Дата 29.1.2008, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 503
Регистрация: 29.6.2007

Репутация: 1
Всего: 6



добавлять эти поля во всех таблицах,которые надо проверять на обновление?ОМГ...там записей может быть больше 1млн.
Прочитал чтото как раз про такие таблицы системные:delete,insert.Они доступны во время выполнения триггера и в них как раз записываются вставленные записи,удаленные записи.Измененные пишутся сначала как удаленные со старыми данными,а в инсерт вставляется запись,как она будет выглядить после изменения.Только не попробовал еще на практике.


--------------------
TheSin - небольшое игровое сообщество взрослых и молодых(L2,WoW,Aion,RFonline and other not mmorpg,not computer games).
сайт гильдии
PM MAIL   Вверх
X-Vlad
Дата 29.1.2008, 13:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 570
Регистрация: 10.4.2002
Где: Украина, Львов

Репутация: 3
Всего: 5



Цитата(Lunatikus @ 29.1.2008,  11:52)
добавлять эти поля во всех таблицах,которые надо проверять на обновление?ОМГ...там записей может быть больше 1млн.
Прочитал чтото как раз про такие таблицы системные:delete,insert.Они доступны во время выполнения триггера и в них как раз записываются вставленные записи,удаленные записи.Измененные пишутся сначала как удаленные со старыми данными,а в инсерт вставляется запись,как она будет выглядить после изменения.Только не попробовал еще на практике.

Цитата

добавлять эти поля во всех таблицах,которые надо проверять на обновление?ОМГ...там записей может быть больше 1млн.

да, добавить два поля. Непойму причем здесь количество записей??? хоть 10 млн... 
защет этих полей ты будешь вытягивать несколько записей.. (новые или изменненые)

Цитата

Прочитал чтото как раз про такие таблицы системные:delete,insert


они доступны только в текущей сесии.. тоесть в тригерах.. после того как транзакция закроется ты там ничего неувидишь.

Это сообщение отредактировал(а) X-Vlad - 29.1.2008, 13:11


--------------------
Хорошая штука - комп..:)
www.x-vlad.com
PM MAIL WWW ICQ   Вверх
Lunatikus
Дата 29.1.2008, 13:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 503
Регистрация: 29.6.2007

Репутация: 1
Всего: 6



Цитата

они доступны только в текущей сесии.. тоесть в тригерах.. после того как транзакция закроется ты там ничего неувидишь

а мне надо больше?я во время срабатывания триггера просто буду измененные данные передавать на клиент.Больше мне не требуется,в принципе.


--------------------
TheSin - небольшое игровое сообщество взрослых и молодых(L2,WoW,Aion,RFonline and other not mmorpg,not computer games).
сайт гильдии
PM MAIL   Вверх
X-Vlad
Дата 29.1.2008, 14:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 570
Регистрация: 10.4.2002
Где: Украина, Львов

Репутация: 3
Всего: 5



Цитата(Lunatikus @ 29.1.2008,  12:46)
Цитата

они доступны только в текущей сесии.. тоесть в тригерах.. после того как транзакция закроется ты там ничего неувидишь

а мне надо больше?я во время срабатывания триггера просто буду измененные данные передавать на клиент.Больше мне не требуется,в принципе.

интересно как ты изх будешь передавать smile подскажи технологию

в интербейсе конечно с этим проще.. потому что есть notification  и их можна отлавливать в программе без особых усилий.. но в MS SQL технология notification намного сложней.. и надо будет хорошенько повозится чтобы реализовать.

Это сообщение отредактировал(а) X-Vlad - 29.1.2008, 14:32


--------------------
Хорошая штука - комп..:)
www.x-vlad.com
PM MAIL WWW ICQ   Вверх
Lunatikus
Дата 29.1.2008, 14:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 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).
сайт гильдии
PM MAIL   Вверх
X-Vlad
Дата 29.1.2008, 16:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 570
Регистрация: 10.4.2002
Где: Украина, Львов

Репутация: 3
Всего: 5



Цитата(Lunatikus @ 29.1.2008,  13:42)
Ну вот пока мои примерные мысли:
Допустим,сработал триггер на вставку новой записи:в таблице insert в это время появилась эта запись.Что мне мешает ее данные забрать в этот момент и передать на клиент?
Т.е. в самом триггере написать запрос на выборку из таблицы insert записей и перекинуть их в #temp.Потом отдельным запросом клиент сможет получить эти данные.

временные таблицы хранятся только в текущей сесии.. и если ты создаш в тригере эту таблицу то после выполнения тригера она удалится так как транзакция закроется.

зделай в программе отдельный поток и в нем с некоторым интервалом запускай скрипт для выборки новых/изменненых данных. после чего делай нужну обработку и т.д.


--------------------
Хорошая штука - комп..:)
www.x-vlad.com
PM MAIL WWW ICQ   Вверх
Lunatikus
Дата 29.1.2008, 16:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 503
Регистрация: 29.6.2007

Репутация: 1
Всего: 6



мм,тогда буду заносить эти новые записи и измененные в отдельную таблицу,не временную.И оттуда периодически буду выбирать.Так?


--------------------
TheSin - небольшое игровое сообщество взрослых и молодых(L2,WoW,Aion,RFonline and other not mmorpg,not computer games).
сайт гильдии
PM MAIL   Вверх
X-Vlad
Дата 29.1.2008, 16:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 570
Регистрация: 10.4.2002
Где: Украина, Львов

Репутация: 3
Всего: 5



Цитата(Lunatikus @ 29.1.2008,  15:28)
мм,тогда буду заносить эти новые записи и измененные в отдельную таблицу,не временную.И оттуда периодически буду выбирать.Так?

создай таблицу и заноси туда для изменненых или добавленных даных название таблицы где это произошло, а потом выбирай из измененной таблицы по create_date и mod_date так ты получишь новые данные + лучший performance.
в туже таблицу можешь заносить название таблицы где были удалены данные просто в отдельном поле ставь ключ который тебе покажет что в даной таблице даные были удалены. 

З.Ы. незабудь очищать эту таблицу после того как ты взял данные. Чтобы не дублировать...


--------------------
Хорошая штука - комп..:)
www.x-vlad.com
PM MAIL WWW ICQ   Вверх
Lunatikus
Дата 29.1.2008, 16:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 503
Регистрация: 29.6.2007

Репутация: 1
Всего: 6



Так получается,что мне надо постоянно обновлять данные этих двух полей в исследуемых таблицах+заносить результаты обновления в еще одну таблицу.Тогда не рпоще ли периодически проверять прямо исследуемые таблицы на предмет соответствия create_date и mod_date ?Зачем в таком случае еще одна таблица?туплю к вечеру ближе...


--------------------
TheSin - небольшое игровое сообщество взрослых и молодых(L2,WoW,Aion,RFonline and other not mmorpg,not computer games).
сайт гильдии
PM MAIL   Вверх
X-Vlad
Дата 29.1.2008, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 570
Регистрация: 10.4.2002
Где: Украина, Львов

Репутация: 3
Всего: 5



Маленькая поправочка. Временные таблицы живут в рамках сесии после утери конета они удаляются автоматом. А в рамках транзакции живут table variable. Немного лоханулся.. но все равно тебе надо использовать физическую таблицу.

Добавлено через 5 минут и 32 секунды
Цитата(Lunatikus @ 29.1.2008,  15:45)
Так получается,что мне надо постоянно обновлять данные этих двух полей в исследуемых таблицах+заносить результаты обновления в еще одну таблицу.Тогда не рпоще ли периодически проверять прямо исследуемые таблицы на предмет соответствия create_date и mod_date ?Зачем в таком случае еще одна таблица?туплю к вечеру ближе...


Цитата

Так получается,что мне надо постоянно обновлять данные этих двух полей в исследуемых таблицах

создаешь поле "MOD_DATE DATETIME DEFAULT GETDATE()" єто поле будет автоматом заполнятся при изменении таблицы. ты только заполняешь поле create_date.


Цитата

заносить результаты обновления в еще одну таблицу.Тогда не рпоще ли периодически проверять прямо исследуемые таблицы на предмет соответствия create_date и mod_date ?Зачем в таком случае еще одна таблица?туплю к вечеру ближе...


ты создаешь таблицу где сохраняються название таблиц которые изменились чтобы непереберать все таблицы в твоей базе на наличие изменений! Подумай о перфомансе. Ну конечно если у тебя одна таблица то тогда ненадо smile)))))



--------------------
Хорошая штука - комп..:)
www.x-vlad.com
PM MAIL WWW ICQ   Вверх
Lunatikus
Дата 29.1.2008, 16:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 503
Регистрация: 29.6.2007

Репутация: 1
Всего: 6



Цитата

ты создаешь таблицу где сохраняються название таблиц которые изменились чтобы непереберать все таблицы в твоей базе на наличие изменений! Подумай о перфомансе. Ну конечно если у тебя одна таблица то тогда ненадо )))))

пока одна.Потом кто знает.Пользователю сколько не кодируй,он все на Windows смотрит.

Добавлено через 25 секунд
спасибо за помощь! smile пойду реализовывать.


--------------------
TheSin - небольшое игровое сообщество взрослых и молодых(L2,WoW,Aion,RFonline and other not mmorpg,not computer games).
сайт гильдии
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0548 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.