С Новым годом! Форум программистов, компьютерный форум, киберфорум
C++ Builder: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.93/27: Рейтинг темы: голосов - 27, средняя оценка - 4.93
98 / 10 / 0
Регистрация: 21.02.2011
Сообщений: 474

Отслеживание изменений в БД

10.12.2012, 13:30. Показов 5320. Ответов 49
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть БД, к которой подключено несколько клиентов. Каждый из них имеет компоненты "DataSource", "ADOConnection" "ADOTable", "DBGrid". Тут рррраз, и в таблицу, к этому всему хозяйству привязанную добавилась строка. Как отследить это дело, чтобы его обработать? Например "DataSource" умеет обрабатывать событие "OnUpdateData". Подойдет? Как это юзать? Самый сложный вопрос: А можно ли об изменении уведомить только одного подключенного юзера?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.12.2012, 13:30
Ответы с готовыми решениями:

Отслеживание изменений
Здравствуйте, учу C#. Сделал таблицу. Когда нажимаю кнопку "Поместить" без введённых данных, то выдаст ошибку, меня бросает на изменение...

Отслеживание изменений
Здравствуйте, подскажите пожалуйста, как в Access можно отследить изменения и пользователя который эти изменения сделал. В Excel есть такая...

отслеживание изменений
И вновь день добрый. как отследить, изменилось ли определенное поле в jsp, непосредственно через Controller ?

49
4 / 4 / 0
Регистрация: 07.12.2012
Сообщений: 21
11.12.2012, 16:35
Студворк — интернет-сервис помощи студентам
Kabak, Все просто Почитай про TClientSocket. В инете куча примеров, например тут: http://www.codenet.ru/progr/bcb/sockets.php
1
872 / 448 / 35
Регистрация: 25.10.2011
Сообщений: 910
12.12.2012, 03:04
Цитата Сообщение от Kabak Посмотреть сообщение
Я так понял что в базе MySQL всё это через Trigпer делается.
Все зависит от конкретной задачи. В общем случае, я бы не рекомендовал использование триггеров для определения изменения данных в таблице. В любом случае нужна точка отчета (время или uid), если говорить о какой-то системе, то она хранится в таблице пользователей, если нет - то на клиентской строне.

В случае с InnoDB - все элементарно, используется запрос вроде:
SQL
1
SHOW TABLE STATUS;
И сравнивается значение поля update_time.

В случае с MyISAM, обычно используется поле типа timestamp с установленым current_timestamp при обновлении. Это позволяет отслеживать изменения данных различными способами. Пара примеров:
SQL
1
2
3
4
SELECT COUNT(*) FROM `table` WHERE `date` > VALUE;
-- результат - количество строк, дата изменений которых, больше чем value.
SELECT `date` FROM `table` ORDER BY `date` DESC LIMIT 1;
-- результат - дата последнего изменения поля в таблице.
Цитата Сообщение от Kabak Посмотреть сообщение
Да, кстати, для прочтения тех же триггеров / служебной таблицы тоже потребуется переподключиться к базе круг замкнулся
Зачем производить реконнект для получения данных из другой таблицы?
1
4 / 4 / 0
Регистрация: 07.12.2012
Сообщений: 21
12.12.2012, 10:15
Введение поле с датой обновления вещь хорошая, если не думать про время и размер базы. Например у меня даже в Оракле запрос
SQL
1
SELECT MAX(date_priem) FROM stat.dell_railn
по индексированному полю занимает почти секунду ("Запрос открыт за 1.312c [0.356c выполнение, 0.956c выборка]"). В таблице больше 13млн записей. Какой смысл увеличивать базу на 13 млн записей дат если важно знать только время последнего обновления? У меня даты хранятся для формирования обновлений пользователям.
0
 Аватар для Kabak
159 / 145 / 14
Регистрация: 03.02.2012
Сообщений: 788
Записей в блоге: 1
12.12.2012, 11:17
Зачем производить реконнект для получения данных из другой таблицы?
Когда один компьютер в локалке внёс изменения в базу, то другой комп. эти изменения не видит пока не переподключится к базе.
0
872 / 448 / 35
Регистрация: 25.10.2011
Сообщений: 910
12.12.2012, 12:47
В случае с InnoDB - все элементарно, используется запрос вроде:
Все-таки ночами спать нужно. TABLE STATUS: update_time - как раз работает для таблиц MyISAM, а с InnoDB всегда null.
Цитата Сообщение от Alex_ZS Посмотреть сообщение
Например у меня даже в Оракле запрос
Вечером отпишусь, но сразу говорю, вычисление максимального значения - не лучший шаг в сторону производительности.
Цитата Сообщение от Kabak Посмотреть сообщение
Когда один компьютер в локалке внёс изменения в базу, то другой комп. эти изменения не видит пока не переподключится к базе.
Достаточно повторить запрос.
0
 Аватар для Kabak
159 / 145 / 14
Регистрация: 03.02.2012
Сообщений: 788
Записей в блоге: 1
12.12.2012, 13:07
Программа работает с базой напрямую для скорости через компонент MyDAC. DBGrid как-то долго обновляется, если по всем записям запросы посылать.
0
98 / 10 / 0
Регистрация: 21.02.2011
Сообщений: 474
17.12.2012, 17:27  [ТС]
Вообщем так. Софтина, по таймеру (раз в секунду) спрашивает
C++
1
int kol=ADOTable2->RecordCount;
И вот, записей поприбавилось на одну.
мы ее забираем, (придумаю как ее локализовать). И юзаю...
Сойдет?
0
 Аватар для Kabak
159 / 145 / 14
Регистрация: 03.02.2012
Сообщений: 788
Записей в блоге: 1
17.12.2012, 17:32
Угу, а если изменилась запись которая уже была, а новых не добавлялось, то как ?
0
98 / 10 / 0
Регистрация: 21.02.2011
Сообщений: 474
18.12.2012, 07:58  [ТС]
Согласно логике программы, этого не произойдет... Редактирования именно этой таблицы не предусмотрено.
0
4 / 4 / 0
Регистрация: 07.12.2012
Сообщений: 21
18.12.2012, 12:09
RecordCount на больших таблицах работает медленно. Разумнее смотреть максимальное значение первичного ключа, и соответственно подгружать все записи с ключом больше того, что уже у клиента. Это, кстати, поможет избежать проблем с удалением, если оно будет.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.12.2012, 12:09
Помогаю со студенческими работами здесь

отслеживание изменений
вот у каждого разработчика получается есть своя копия репозитория(которую он получает спомощью git clone) так? И если я у себя создам...

Отслеживание изменений
Кто-нибудь знает как отслеживать изменения модели $scope.applyingParameters = { checkbox: '', chooseView:...

Отслеживание изменений
Добрый день. Уважаемые форумчане, подскажите где подсмотреть. Пытаюсь написать пинговалку. private bool ConnectedStatus(string _ip) ...

Отслеживание изменений БД
Добрый вечер! Подскажите, есть ли простой способ отслеживания изменений в БД? Необходимо, чтобы при открытии БД юзер выбирал своё...

Отслеживание изменений в TextBox
Здравствуйте! Подскажите пожалуйста. Стоит задача изменить в базе данных некоторые значения. Я выгружаю эти значения в текстовые...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
50
Ответ Создать тему
Новые блоги и статьи
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru