Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.10.17;
Скачать: CL | DM;

Вниз

Real time изменение записей!   Найти похожие ветки 

 
Pashkerton   (2004-09-22 10:41) [0]

Доброе Утро!
На MSSQL2000 Servere БД. В ней 2 таблицы. Записи на Servere обновляются и дополняются
каждые 2 минуты.
Таблица 1: records
| cardcode | time | date | action |

Таблица 2: personal
| cardcode | fio |

Значение поля action из таблицы 1 означает "1"-человек пришел, "0"-человек ушел.

Нужно на удалённой машине в realtime(возможно по таймеру) выводить fio всех кто на
данный момент пришел.
SELECT MAX(time) FROM records WHERE cardcode = "..." (одному из номеров из таблицы 2)
итак по всем номерам? Создавать на клиенте временную таблицу?
Есть какие нибудь решения такой задачи?


 
Суслик ©   (2004-09-22 10:52) [1]

1) real time это такое модное слово или оно имеет определенный смысл?
2) объяснил бы что значит time и date
3) где врем ухода?
4) если считается, что люди не уходят то запрос типа такого
select t2.fio
from table1 t1
inner join table2 t2 on t2.cardcode = t1.cardcode
where t1.time <= currecnt_timestamp


 
Miralex ©   (2004-09-22 10:53) [2]


> Pashkerton

По таймеру и делай выборки с таблицы.
(если есть проблемы с SQL языком - почитай статьи на citforum.ru)


 
Pashkerton   (2004-09-22 10:58) [3]

Исправляюсь.
1) Если кто пришел, то он сразу должен отобразиться на клиенте
2) time - время события, date - дата события
пример  123|11:00:00|2004/09/22|1| человек пришел в 11:00
       123|12:00:00|2004/09/22|0| человек ушел в 12:00
3) За уход/приход отвечает поле action


 
Суслик ©   (2004-09-22 11:03) [4]


>  [3] Pashkerton   (22.09.04 10:58)


> 3) За уход/приход отвечает поле action

да понял я уже - сначала невнимательно прочел вопрос.

на фига тебе два поля time и date?
есть же тип в mssql server datatime и smalldatetime?


> 1) Если кто пришел, то он сразу должен отобразиться на клиенте

так не выйдет - нужно переодически опрашивать.
Вернее теоретически можно, но сложно.

ЗЫ. ЗАпрос сейчас напишу.


 
КаПиБаРа ©   (2004-09-22 11:16) [5]

Нужен "сервер оповещений", который при добавлении записи в базу будет рассылать клиентам сообщения что  произошли изменения.

============================================
Сексом надо заниматься только в одном
единственном случае - когда он пpедставится.
============================================


 
Суслик ©   (2004-09-22 11:24) [6]


> ЗЫ. ЗАпрос сейчас напишу.

Пообещал, а написать не могу, т.к. нужно подумать, а времени нет. Прости :)


 
Pashkerton   (2004-09-22 11:33) [7]

Решение нашел!
завести таблицу со всеми карточками и где есть поле состояние (State).
при добавлении в журнал прихода/ухода обновлять это поле =  action.
тогда запрос будет выглядеть как select * from Table2 where State = 1
А можно где нибудь хранить временной штамп, и если он изменился - значит были внесены изменения то делать выборку.


 
Sandman25 ©   (2004-09-22 11:37) [8]

[7] Pashkerton   (22.09.04 11:33)

Лучше добавить поле - время последнего изменения.
И еще по триггеру писать в новую таблицу из одного поля и одной записи - время последнего изменения по всей таблице. Тогда сначала извлекается это значение, и если оказывается, что данные изменились, происходит выполнение select ... where datetime_change > :last_client_update для поиска измененный данных.


 
Johnmen ©   (2004-09-22 12:58) [9]

Примерно так

SELECT DISTINCT A.cardcode, B.fio FROM Таблица1 A
JOIN Таблица2 B ON B.cardcode=A.cardcode
WHERE (A.action=1) AND
 (A.datetime<=[интересующее датавремя]) AND
 (([интересующее датавремя]-A.datetime)=
   (SELECT MIN([интересующее датавремя]-A.datetime) FROM Таблица1 C
    WHERE (C.cardcode=A.cardcode) AND (A.action=1))) AND
 (NOT EXISTS (SELECT 0 FROM Таблица1 D
              WHERE (D.cardcode=A.cardcode) AND
                (D.action=0) AND
                (D.datetime<=[интересующее датавремя]) AND
                (D.datetime>=A.datetime)))


Если настаиваешь на раздельном хранении даты и времени, то сам модифицируешь. Я бы не стал настаивать...:)



Страницы: 1 вся ветка

Текущий архив: 2004.10.17;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.037 c
3-1095832372
jonik
2004-09-22 09:52
2004.10.17
Запрос и хранимая процедура в Firebird


3-1095352280
3APA3A
2004-09-16 20:31
2004.10.17
select distinct ...


1-1096735064
Charly22
2004-10-02 20:37
2004.10.17
Закрытие дочерней формы или всего приложения.


3-1095619050
Dio
2004-09-19 22:37
2004.10.17
Компанент


1-1096630109
Kolan
2004-10-01 15:28
2004.10.17
Delphi + новая компонента = НЕРАБОТАЕТ delphi