Здрасте всем.
Дано:
Приложение, которое по ODBC ассинхронно (по мере поступления из интернета) пуляет данные в таблицу MySQL. Структура таблицы A:
ID NAME VALUE TIME
При поступлении в нее новых данных строки не добавляются, а обновляются, причем обновляются только 2 столбца VALUE и TIME соответственно.
Задача:
Создать приложение на Delphi которое будет ассинхронно, опять же, по мере обновления данных в таблице, обрабатывать эти данные и отправлять результаты в другую таблицу, B, в той же БД.
На данный момент я реализовал это через ODBC и таймер. Сложность в том, что данные обновляются чертовски быстро, несколько рз в секунду, поэтому, таймер установлен в несколько раз быстрее потениально возможной скорости обновления исходных данных. Проблема в том, как можно организовать динамическое обновление таблицы B? Не глупым таймером, котороый 20 раз в секунду будет просматривать таблицу А и грузить комп, а по мере обновления данных?
Кто сталкивался, где почитать? Перерыл многое - нашел, да почти ничего не нашел..(
MySQL 5.0, Delphi 7, доступ к MySQL = ZeosDBO
Буду рад любой помощи.
Ассинхронное обновление данных из БД
Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду
- Игорь Акопян
- Сообщения: 1440
- Зарегистрирован: 13 окт 2004, 17:11
- Откуда: СПБ
- Контактная информация:
не знаю MySQL... А триггеров там нет? 


Вроде есть, но я с ними ниразу не работал, если можно, вкратце ликбез по триггерам? 

-
- Сообщения: 407
- Зарегистрирован: 13 сен 2004, 12:05
- Откуда: Курган
- Контактная информация:
Слушай, а типа в свойствах компонента который держит связь с таблицей нет AfterPost???
Чем проще - тем оригинальней, а значит гениально, т.к. все гениальное - просто!
Да! Кстати! Ctrl+V реально вставляет!!! ХDD

- Игорь Акопян
- Сообщения: 1440
- Зарегистрирован: 13 окт 2004, 17:11
- Откуда: СПБ
- Контактная информация:
Perecz, триггер - это процедура выполняемая сервером БД по определённому событию.
пример:
[syntax:541f2b142f="sql"]
-- перед вставкой новой записи присвоит GUID полю
create trigger MyTable_bi_70 for MyTable before insert position 70 as
begin
new.Guid = CREATEGUID();
end
-- зачистка зависимых таблиц после удаления записи в основной
create trigger MyTable_ad_90 for MyTable after delete position 90 as
begin
delete from MyTable1 where ID = old.ID;
delete from MyTable2 where ID = old.ID;
end
[/syntax:541f2b142f]
В вашем случае напрашивается триггер на событие After Update
пример:
[syntax:541f2b142f="sql"]
-- перед вставкой новой записи присвоит GUID полю
create trigger MyTable_bi_70 for MyTable before insert position 70 as
begin
new.Guid = CREATEGUID();
end
-- зачистка зависимых таблиц после удаления записи в основной
create trigger MyTable_ad_90 for MyTable after delete position 90 as
begin
delete from MyTable1 where ID = old.ID;
delete from MyTable2 where ID = old.ID;
end
[/syntax:541f2b142f]
В вашем случае напрашивается триггер на событие After Update
Не-а, нету, но есть свойство OnUpdateRecord.Dr_Grizzly писал(а):Слушай, а типа в свойствах компонента который держит связь с таблицей нет AfterPost???
Т.е. складывая воедино всё, что удалось узнать получается так:
ZConnection1 - держит связь с базой, ZTable1 - держит связь с таблицей, естественно, у обеих компонент Active = True;
при этом, свойство у ZTable1 OnUpdateRecord имеется, такм образом, если написать обработчик для этого свойства, то при каждом обновлении какой-либо записи.. будет срабатывать этот обраотчик?
Проверил еще раз.. есть AfterApplyUpdates...
Или какие-то еще условия необходымы?
Смысл еще раз попробую пояснить...
Чужая программа через ODBC обновляет записи в БД.
Моя программа должна подгружать в себя обновившиеся значения, обрабатывать и записывать их в разные таблицы, в соответствии с разными условиями...