Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Можно ли складывать DateTime поля...


Страницы:   1 2

Aristarh ©   (2002-11-08 11:22:00) 

...в хранимых процедурах IB? IB Expert что-то ругается: expression evaluation not supported. Если складывать нельзя, то это огромный недостаток IB.


MMF   (2002-11-08 16:51:00) [1]

Ну,я так понял, что тебе нужно разделять время по группам или по другим характеристикам клиентов, по которым потом делать отчеты. К тому же в таблице статистики можно сделать поле WorkDate default Now() чтобы хранить историю работы клиентов по суткам.


Aristarh   (2002-11-08 16:43:00) [2]

MMF, разве не проще хранить общее время в одном поле, а не создавать доп. таблиц.

>менять период обновления статистики на какой хочешь
Если использовать одно поле, то можно вообще не привязываться к периодам. Что передал в проц., на то и увеличилось время.


MMF   (2002-11-08 16:40:00) [3]

Поправка Update TimeTable set TotalTime=TotalTime+1
where userID=:client_ID
Просто мне кажется лучше вести учет времени в условных единицах, и менять период обновления статистики на какой хочешь


MMF   (2002-11-08 16:30:00) [4]

Ладно, забудем про генераторы. Тот же принцип, но в таблице
CREATE PROCEDURE IncTime(
Client_ID integer)
AS
DECLARE VARIABLE UserPresent integer;
begin
:UserPresent=0;

select count(*) from Timetable
where UserID=:Client_ID
into :UserPresent;

if UserPresent=0 then
insert into TimeTable(UserID, TotalTime)
values (:Client_ID, 0);

Update TotalTime set TotalTime=TotalTime+1
where userID=:client_ID
end


Aristarh   (2002-11-08 16:26:00) [5]

Всем спасибо.


Wolf226   (2002-11-08 16:25:00) [6]

Кстати выполнить такой запрос не выйдет
update Statistics
set WorkTime = WorkTime + :Seconds
where ...

Не поддерживается сложение с параметром.
А вот если это же сделать в хранимой процедуре, то должно пройти.


Wolf226   (2002-11-08 16:22:00) [7]

Передавать как Double.
Потому что если передавать 2:00:00 как DateTime, то получишь 1.1.1900 2:00:00, если не ошибаюсь.


Wolf226   (2002-11-08 16:17:00) [8]

Уточню, хранить в днях, а не в часах или секундах.
12 часов=0.5
Ну чтобы было как в Delphi и не надо было пересчитывать ничего.


Aristarh   (2002-11-08 16:13:00) [9]

>MMF © (08.11.02 16:06)
>по-твоему загрузит Интербэйс?

Нет не загрузит. Сейчас объясню. Это прога обзвона абонентов. Обзвон идет по определенным группам. Например, группа обзвона должников или группа информирования о тарифе. Один клиент может работать с одной группой, другой - с другой.
В твоем варианте каждому клиенту надо было бы иметь свой генератор, потому, что статистика работы ведется для каждой группы. Групп может быть произвольное кол-во, сл-но произвольное кол-во должно быть и генераторов.


Aristarh   (2002-11-08 16:07:00) [10]

>MMF © (08.11.02 15:57)
Долго объяснять все нюансы проги и БД, но не подходит однозначно и дело даже не в красоте.

>Wolf226 © (08.11.02 16:01)
>Храни тогда время в double precision.

Пока на этом и остановился.
Передавать время как Double или DateTime?


MMF   (2002-11-08 16:06:00) [11]

Допустим у тебя два десятка клиентов - получаем 20 очень коротких добавочных транзакций в секунду (в случае 1с), это что, по-твоему загрузит Интербэйс?


Aristarh   (2002-11-08 16:02:00) [12]

>MMF © (08.11.02 15:57)

Не красиво все это.


Wolf226   (2002-11-08 16:01:00) [13]

Храни тогда время в double precision.
И прибавляй к нему по завершению работы.

А на счет варианта MMF я вот что думаю:
Недостатки:
1. Прийдется выбирать между точностью и тормозами.
Хотя если посылать каждую минуту, то будет все OK.
А посылать каждую секунду - это никому не надо, ни тебе, ни программе.
Преймущества.
1. Видно значение с учетом еще не завершившихся сеансов.
2. Если программа вылетит, то в твоем варианте, данные потеряются, а в этом запомнятся.


MMF   (2002-11-08 15:57:00) [14]

А что тут сложного? К тому же сервер работает быстрее с генераторами, чем с таблицами


Aristarh   (2002-11-08 15:49:00) [15]

>MMF © (08.11.02 15:46)
>Считай время в генераторе,

Ну... Зачем так сложно? На худой конец можно хранить в интеджер кол-во секунд.


Aristarh   (2002-11-08 15:47:00) [16]

>Wolf226 © (08.11.02 15:44)
>что должно получиться? 3 часа или 4 часа?

4 часа.


MMF   (2002-11-08 15:46:00) [17]

Считай время в генераторе, у каждого клиента запускай по таймеру с нужным интервалом gen_id(G_TotalWorkTime, 1) и будешь видеть не после закрытия клиента, а во время работы клиентов накопленное время в выбранных тобой временных интервалах


Wolf226   (2002-11-08 15:44:00) [18]

Уточни
Клиент 1: 13:00 - 15:00
Клиент 2: 14:00 - 16:00

что должно получиться?
3 часа или 4 часа?


Aristarh   (2002-11-08 15:29:00) [19]

Уточнение вопроса:

Есть скажем 3 клиента (не человека, а автоматически работающие программы). При запуске каждого клиента запускается таймер. При завершение работы клиента, клиент должен посмотреть по таймеру сколько часов, минут, секунд (формат TTime) он проработал и отослать это значение серверу в хранимую процедуру.
Сервер должен принять это значение и приплюсовать к некоторому полю. Значений старта и останова клиента сервер не хранит.

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


MMF   (2002-11-08 15:20:00) [20]

Поправка:
for select distinct ID_User from w_seans


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо