![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
контроль временных параметров [D7, IB6.x]
stud © (2003-12-08 10:17:00)
все наверное сталкивались с такой проблемой, есть некоторые параметры, которые зависят от даты или времени, например есть срок действия чего-либо (услуги предоставляются с даты и по дату) и по окончании этого срока надо перевести эту услугу в неактивное состояние, чтобы больше ее не использовать - установить признак в 0. как это лучше реализовать, учитывая, что система многопользовательская?
stud (2003-12-08 15:16:00) [1]
возможно...
Danilka (2003-12-08 14:58:00) [2]
см еще раз:
[6] Silver Alex © (08.12.03 11:54)
select * from table
where
fromdate<=:OnDate
and (todate>=:OnDate or todate is null)
stud (2003-12-08 14:54:00) [3]
так тут еще одна проблема)) есть программы, у которых срок действия не ограничен, т.е. даты окончания они не имеют, вот тут признак и нужен
Danilka (2003-12-08 13:13:00) [4]
причем, нисколько не медленнее, чем "select * from table where pr=1".
Danilka (2003-12-08 13:13:00) [5]
[12] stud © (08.12.03 13:10)
индексы тебя спасут. :))
какие проблемы? хоть мильен мильенов записей, запрос вот-сдесь:
[6] Silver Alex © (08.12.03 11:54)
отработает очень шустро, если будут индексы по полям с датой. :))
stud (2003-12-08 13:10:00) [6]
дело в том, что "просроченые" записи не удаляются, все это дело накапливается т.е. с каждым разом придется проверять даты у все большего количества записей.
а если будет отдельная программка висеть, она например в час ночи проверяет даты и меняет признак с 1 на 0 один. раз т.е. проверка по дате тут отпадает - смотрим по признаку
Silver Alex (2003-12-08 12:54:00) [7]
> в общем да, но запрос типа select * from table where pr=1
> более приятный)). хотя может зря я велосипед придумываю))
все данные достаются на дату.Правильно?Ты ведь не напишешь просто "select * from table where pr=1".Когда эта запись "закрыта",например 10.10.2003 ,а мы открываем на 01.10.2003?, в любом случае надо смотреть на дату
Danilka (2003-12-08 12:45:00) [8]
> [8] stud © (08.12.03 12:16)
> в общем да, но запрос типа select * from table where pr=1
> более приятный)). хотя может зря я велосипед придумываю))
какой-же это велосипед? это намного хуже. :))
вообще, что значит "намного приятнее писать"? тебе текст запроса 1 раз в программе написать, и больше его не трогать, так что мог-бы и пересилить себя. :))
в любом случае - луче чем плодить избыточность данных и недостоверность информации.
в крайнем случае, напиши вьюху или ХП, в которой будет доп. поле: pr=1 или 0, и делай селект из нее наздоровье.
stud (2003-12-08 12:19:00) [9]
> Desdechado © (08.12.03 12:15) [7]
вот. т.е. нужно писать отдельную программку. которая будет постоянно работать на сервере и менять что нужно.
все, спасибо
stud (2003-12-08 12:16:00) [10]
> Silver Alex © (08.12.03 11:54) [6]
в общем да, но запрос типа select * from table where pr=1 более приятный)). хотя может зря я велосипед придумываю))
Desdechado (2003-12-08 12:15:00) [11]
а почему вдруг "ВСЕ пользователи начнут ломиться неактивность изменять"?
Пусть проверяется перед изменением по всем медпрограммам. Как это реализовать, другой вопрос (на клиенте/ах, сервисом, на сервере)...
Silver Alex (2003-12-08 11:54:00) [12]
а какой перевод в неактивное состояние если есть две даты, начало и конец действия, разве мало этого?Запрос может просто надо пофиксить.Или я неверно понял
select * from table
where
fromdate<=:OnDate
and (todate>=:OnDate or todate is null)
Sergey13 (2003-12-08 11:30:00) [13]
Ну например если есть две даты - начало и конец - то запись с пустой датой конца - активна, с непустой - архив. Соответственно преписать запросы.
Тут все зависит от логики работы. Можно ли работать "задним числом", есть ли человек отвечающий за "актуальность" данных и т.д. и т.п.
stud (2003-12-08 10:44:00) [14]
> Anatoly Podgoretsky © (08.12.03 10:37) [3]
как всегда, все гениальное - просто!
перевести - это не проблема)) как это реализовать? если при запуске программы проверять все эти вещи, то например все пользователи будут при запуске ломиться на сервер, чтобы выполнить одну и ту же операцию, к томе же кем то уже сделанную. по-моему это не есть хорошо. вот и интересно мнение, может кто встречался с подобной проблемой и есть какие-то реализации?
Anatoly Podgoretsky (2003-12-08 10:37:00) [15]
Так и переведи в неактивное состояние.
stud (2003-12-08 10:35:00) [16]
если уточнить, то будет так:
есть таблица, в которой содержаться сведения о сроках действия медицинских программ, т.е. услуги по программе оказываются с такого-то числа и по такое-то. вот проблема собственно в том, чтобы при наступлении даты окончания действия программы она переводилась в неактивное состояние.
Sergey13 (2003-12-08 10:29:00) [17]
ИМХО, слишком общий вопрос. Ответ - как сможешь, так и делай.