Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2004.10.17;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.033 c
14-1096101166
Lenor
2004-09-25 12:32
2004.10.17
как узнать, кем...


1-1096482823
diabolik
2004-09-29 22:33
2004.10.17
Обработка событий в TListView


1-1096441900
Михалыч
2004-09-29 11:11
2004.10.17
Как сохранить в одном файле


6-1091704405
dimm22
2004-08-05 15:13
2004.10.17
Как программно изменить свойства подключения IExplorera?


3-1095565861
Fedia
2004-09-19 07:51
2004.10.17
Остановка выполнения SQL запроса





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский