Вверх ↑
Этот топик читают: Гость
Ответов: 16884
Рейтинг: 1239
#1036: 2012-10-13 01:21:08 ЛС | профиль | цитата
code_29281.txt
Ты что забыл, что по моей просьбе http://forum.d2h.ru/forum.html?q=3&p=234740#p234740 добавил нижнюю точку DateInt ?
#pas
procedure THIDatePicker._var_DateInt;
var dt: TDateTime;
st: TSystemTime;
begin
Control.Perform(DTM_GETSYSTEMTIME,0,Longint(@st));
SystemTime2DateTime(st,dt);
dtInteger(_Data, trunc(dt));
end;
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
файлы: 1code_29281.txt [137B] [189]
Разработчик
Ответов: 26068
Рейтинг: 2121
#1037: 2012-10-13 02:04:29 ЛС | профиль | цитата
Tad писал(а):
Ты что забыл, что по моей просьбе

Ё, млин!!! Старею, сам сделал, и сам же забыл Вот видишь, я сам столкнулся с тем, что эта точка очень даже нужна. Так что, тут ты был прав, насчет DateInt
карма: 22

0
Гость
Ответов: 17029
Рейтинг: 0
#1038: 2012-10-13 07:12:48 правка | ЛС | профиль | цитата


Редактировалось 4 раз(а), последний 2022-04-02 23:52:10
карма: 0

0
Ответов: 16884
Рейтинг: 1239
#1039: 2012-10-14 16:29:12 ЛС | профиль | цитата
nesco, [flood]Вообще то, по правильному, DatePicker в режиме даты должен всегда выдавать DateInt, а в режиме Time выдавать только время (хотябы в секундах).
Или иметь внизу точки DateInt, TimeInt
А у нас
code_29293.txt
А у нас без внешней математики (вспоминается Galkov с гландами) никуда.
Неправильно это. ИМХО.
Я уже сталкивался с такой проблемой - необходимо было ввести в БД данные Дата, Время (Дежурный на платной стоянке записывает в журнал, а в конце смены оператор заносит в БД)
[/flood]
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
файлы: 1code_29293.txt [548B] [240]
Разработчик
Ответов: 26068
Рейтинг: 2121
#1040: 2012-10-24 19:44:08 ЛС | профиль | цитата
Tad, выручай, че-то я потерялся. Нужно определить последнее число месяца, если период попадает в конец этого месяца. Предположим, отметка произошла 12.02.2013, значит, начало отсета будет 01.02.2013. Задаем период в месяцах и умножаем его на 27 (количество дней, гарантировано попадающее в окно месяца, считая от 1), что гарантровано попадет на конец самого короткого месяца при периоде в 1 месяц. Но вот мне надо не 1 месяц, а предположим -- 3 месяца. Умножаю 3 на 27 получаю 81 и попадаю на 23.04.2013. Как мне автоматически, одной формулой вычислить, какое будет последнее число в этом 04 месяце, зная только целое значение от 23.04.2013 Это нужно, чтобы получить диапазон окна от 01.02.2013 до 30.04.2013
Или это решается тупым массивом -- даешь индекс 04 и получаешь на выходе 30 Но это не интересно
карма: 22

0
Ответов: 16884
Рейтинг: 1239
#1041: 2012-10-24 20:28:45 ЛС | профиль | цитата
Вычисляем начало
#pas
SELECT date('2013-02-12','start of month');
Получаем начало отсчета 2013-02-01

Расчитываем конец (я добавил три месяца)
Твоя дата +3 месяца -1 день = получаем конец
#pas
SELECT date('2013-02-12','start of month','+3 month','-1 day');
Получим 2013-04-30

А можешь одним махом
SELECT date('2013-02-12','+3 month')
и получишь 2013-05-12

А проблем не будет , если 2013-05-12 выпадет на субботу или воскресенье ? Или на праздничные дни ?
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Разработчик
Ответов: 26068
Рейтинг: 2121
#1042: 2012-10-24 22:11:33 ЛС | профиль | цитата
Tad писал(а):
А проблем не будет , если 2013-05-12 выпадет на субботу или воскресенье ? Или на праздничные дни ?

Это по деревне, важно получить окно. В начале каждого периода, те 1-го числа начала периода, со всех нужных объектов снимается статус обслуженных и по мере надобности, части из них будет присваиваться вручную статус очередных на обслуживание каждый рабочий день, после выполнения обслуживания, объекту присвоится вручную статус обслуженный и запросит дату выполнения (записывается в отдельное поле), после чего обекту выставиться следующее окно от конца предыдущего окна. Я вижу, что есть "start of month", а "end of month" есть Вообще-то, это прога мне нужна для планирования регламентных работ на объектах, некоторые объекты надо обслуживать раз в месяц, а некоторые -- раз в квартал.

PS. Столкнулся с тем, что в MT таблицу пришлось добавить реакцию на TriState состояние флажков (к сожалению, но это работает только для внешних иконок этих флажков, на системных работает только на двух состояниях), че-то об этом я раньше не подумал
карма: 22

0
Ответов: 16884
Рейтинг: 1239
#1043: 2012-10-24 23:06:07 ЛС | профиль | цитата
"end of month" нет
"end of month" расчитывается так:
По дате переходим на 'start of month', добавляем '+1 month' = первое число следующего месяца и '-1 day' = получаем последний день месяца.
SELECT date('2013-02-12','start of month','+1 month','-1 day'); 
Получаем 2013-02-28
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
1
Голосовали:nesco
Разработчик
Ответов: 26068
Рейтинг: 2121
#1044: 2012-10-24 23:50:38 ЛС | профиль | цитата
Tad писал(а):
"end of month" расчитывается так

Тю! Точно, и че мне в голову такое не пришло Спасибо
------------ Дoбавленo в 23.50:
Tad, ты пишешь дату в формате 2013-02-12, что не совсем удобно для нас, а как ее использовать в нашем формате 12-02-2013. Я так понимаю, что нужно переконвертировать. И как это правильно сделать
И может ли эта дата быть значением поля таблицы
карма: 22

0
Ответов: 16884
Рейтинг: 1239
#1045: 2012-10-24 23:51:45 ЛС | профиль | цитата
Бывает. Иногда на такой мути спотыкаешься, что потом сам себе удивляешься.
------------ Дoбавленo в 23.51:
nesco, а как у тебя дата в БД и под каким именем ?
Если как DataInt или DataTime(real) то просто :
SELECT date(<имя колонки> + МАГИЧЕСКОЕ ЧИСЛО,'start of month','+1 month','-1 day'); 
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Разработчик
Ответов: 26068
Рейтинг: 2121
#1046: 2012-10-25 01:13:33 ЛС | профиль | цитата
Tad писал(а):
Если как DataInt или DataTime(real) то просто

Обычный Integer, как ты и советовал. Работает прекрасно с магическим числом
------------ Дoбавленo в 01.13:
Есть еще небольшой вопрос -- как можно получить запросами следующий результат выполнения -- 0, если дата меньше диапазона и 1, если попадает в диапазон или больше Или немного усложнить и сделать так -- 0, если меньше диапазона, 1, если в диапазоне и 2, если больше
карма: 22

0
Ответов: 16884
Рейтинг: 1239
#1047: 2012-10-25 01:55:02 ЛС | профиль | цитата
Примерно както так
#pas
SELECT CASE
WHEN data < начала THEN 0
WHEN data > конца THEN 2
WNEN data between начало AND конец THEN 1
end
FROM имя таблицы
Для более точной справки нужно видеть структуру таблицы.

На сегодня всё. У нас 23:55. Пошёл спать.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Разработчик
Ответов: 26068
Рейтинг: 2121
#1048: 2012-10-25 02:44:36 ЛС | профиль | цитата
Tad писал(а):
Для более точной справки нужно видеть структуру таблицы

Этого мне за глаза хватит. Помню, что что-то было, но вот совсем забыл, что это мы уже рассматривали в этом же топике. Буду мучить дальше. Если бы я очень часто что-то подобное делал, то точно бы запомнил, а так, со временем забывается
карма: 22

0
Ответов: 1528
Рейтинг: 57
#1049: 2012-10-25 05:09:59 ЛС | профиль | цитата
nesco, [flood]учите лучше java или c#, там есть Hibernate||nHibernate и объектный язык запросов Criteria. Будете получать данные как будто обращаетесь к переменной.[/flood]
карма: 0

0
Разработчик
Ответов: 26068
Рейтинг: 2121
#1050: 2012-10-25 10:11:02 ЛС | профиль | цитата
hitman249,
[flood]
hitman249 писал(а):
учите лучше java или c#, там есть Hibernate||nHibernate и объектный язык запросов Criteria

И на Х оно мне нужно
nesco писал(а):
Если бы я очень часто что-то подобное делал

то может быть и подумал бы[/flood]

карма: 22

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)