Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.95/20: Рейтинг темы: голосов - 20, средняя оценка - 4.95
2 / 2 / 0
Регистрация: 02.12.2009
Сообщений: 55

Системное время

24.07.2010, 05:56. Показов 4135. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ребята, делаю программку дни рождения и хочу, чтоб меня оповещала программа, когда будет тому или иному человеку день рождения. Создал табличку с полями 'Число (числовой тип данных) ', 'Месяц (текстовый) ', 'Год рождения (числовой)'.
 Комментарий модератора 
А вопрос то в чем?


Добавлено через 2 часа 22 минуты
Вопрос таков:
Подскажите как системную дату сравнивать с датой у меня в базе?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
24.07.2010, 05:56
Ответы с готовыми решениями:

Системное время и БД
Ребята, привет! Скажите, как решить задачу, у меня есть поле в котором дата рождения человека, мне нужно, чтоб эта дата сравнивалась с...

Обратный отсчет и системное время.
Здравствуйте, такой вопросик, нужно запомнить системное время, и через несколько минут выдавать какое-то сообщение, типа обратного отсчёта.

Какой код надо прописать в Delphi (задать таймер на 30 дней (системное время,год,м) программа закрывается
год, Месяц, день программа закрывается после компеляции осталась время неизменно Надо чтобы в коде сразу прописать дату закрытия

22
 Аватар для arni
914 / 879 / 62
Регистрация: 06.01.2010
Сообщений: 2,367
Записей в блоге: 6
24.07.2010, 10:17
- месяц хранить числом
- вызывать SELECT где в условиях фильтрации сравнивать текущий день с полем "день" и текущий месяц с полем "месяц". Возвращенные записи будут идентифицировать именниников.
1
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
24.07.2010, 10:22
Прохор, извиняюсь, а зачем дату на составляющие делить?
а вообще - объединяйте эти поля конкатенацией и сравнивайте себе спокойно
0
1263 / 706 / 62
Регистрация: 21.12.2009
Сообщений: 2,256
24.07.2010, 14:26
В подобных задачах всегда предпочитаю хранить дату в формате именно даты. При необходимости организуется сравнения день <--> день, месяц <--> месяц, год <--> год, извлекая эти значениия из дат. Как извлекать, зависит от того, где извлекаешь (на сервере или на клиенте)
0
2 / 2 / 0
Регистрация: 02.12.2009
Сообщений: 55
27.07.2010, 22:54  [ТС]
Цитата Сообщение от arni Посмотреть сообщение
- месяц хранить числом
- вызывать SELECT где в условиях фильтрации сравнивать текущий день с полем "день" и текущий месяц с полем "месяц". Возвращенные записи будут идентифицировать именниников.
А как это сделать практично, если можно подобный пример....
0
 Аватар для arni
914 / 879 / 62
Регистрация: 06.01.2010
Сообщений: 2,367
Записей в блоге: 6
27.07.2010, 23:06
Дни рождения, выпадающие на сегодняшнее число (синтаксис IB/FB)
SQL
1
2
3
4
SELECT p.FIO, p.birthday
  FROM PEOPLE p
 WHERE EXTRACT(MONTH FROM p.birthday)=EXTRACT(MONTH FROM CURRENT_DATE)
   AND EXTRACT(DAY FROM p.birthday)=EXTRACT(DAY FROM CURRENT_DATE)
p.s.
current_date - контекстная переменная в IB/FB для текущей даты,
extract(TIME_PART from DATE[TIME]) - функция IB/FB для извлечения части даты или времени
1
2 / 2 / 0
Регистрация: 02.12.2009
Сообщений: 55
27.07.2010, 23:29  [ТС]
Цитата Сообщение от arni Посмотреть сообщение
Дни рождения, выпадающие на сегодняшнее число (синтаксис IB/FB)
SQL
1
2
3
4
SELECT p.FIO, p.birthday
  FROM PEOPLE p
 WHERE EXTRACT(MONTH FROM p.birthday)=EXTRACT(MONTH FROM CURRENT_DATE)
   AND EXTRACT(DAY FROM p.birthday)=EXTRACT(DAY FROM CURRENT_DATE)
p.s.
current_date - контекстная переменная в IB/FB для текущей даты,
extract(TIME_PART from DATE[TIME]) - функция IB/FB для извлечения части даты или времени
Мда немного сложновато для понимания... Давайте к примеру возьмем мои таблицы...
Таблица1 ФИО там находятся поля:"Фамилия" "Имя" "Статус" "Номер_месяца" "Число_рождения"
Таблица2 ГР поля: "Месяц" "Месяц_номер"
К примеру возьмем одного именинника:
"Фамилия" Болтян
"Имя" Саша
"Статус" Друзья
"Номер_месяца" 7
"Число_рождения" 27
0
1263 / 706 / 62
Регистрация: 21.12.2009
Сообщений: 2,256
28.07.2010, 06:34
немного сложновато для понимания
Абсолютно ничего сложного нет. Вам советуют
1. Отказаться от хранения таких атрибутов, как номер месяца и день. Есть такое понятие, как дата рождения и эту дату нужно хранить в формате именно даты. У любой нормальной СУБД есть форматы хранения дат.
2. Пример который для Вас привел arni показывает как из даты при необходимости извлечь месяц, день, год. Все просто, как точило.
1
2 / 2 / 0
Регистрация: 02.12.2009
Сообщений: 55
28.07.2010, 23:27  [ТС]
Цитата Сообщение от SAMZ Посмотреть сообщение
Абсолютно ничего сложного нет. Вам советуют
1. Отказаться от хранения таких атрибутов, как номер месяца и день. Есть такое понятие, как дата рождения и эту дату нужно хранить в формате именно даты. У любой нормальной СУБД есть форматы хранения дат.
2. Пример который для Вас привел arni показывает как из даты при необходимости извлечь месяц, день, год. Все просто, как точило.
Вот мой листинг, проблема в том что во время чтения даты с базы читается и сравнивается первая запись таблицы......Что делать ребята, подскажите.....
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
procedure TForm1.Button1Click(Sender: TObject);
begin
label1.Caption:=DateToStr(Now);
end;
 
procedure TForm1.Button2Click(Sender: TObject);
begin
ADOQuery1.Active:=false;
ADOQuery1.SQL.Text:='SELECT ФИО.Номер_мес FROM ФИО';
ADOQuery1.Active:=true;
Label2.Caption:=DateToStr(ADOQuery1.FieldByName('Номер_мес').AsDateTime);
if Label1.Caption=Label2.Caption then
begin
ShowMessage('Сегодня деньро у'+DateToStr(Now));
end;
if Label1.Caption<>Label2.Caption then
begin
ShowMessage('Сегодня нет деньро');
end;
end;
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
28.07.2010, 23:33
Прохор, ну так правильно, вы же первую запись читаете... а чтобы пройтись по всем данным запроса надо использовать цикл
0
2 / 2 / 0
Регистрация: 02.12.2009
Сообщений: 55
28.07.2010, 23:36  [ТС]
Цитата Сообщение от Lord_Voodoo Посмотреть сообщение
Прохор, ну так правильно, вы же первую запись читаете... а чтобы пройтись по всем данным запроса надо использовать цикл
\
Можете сделать правильный цикл, буду благодарен..
0
Почетный модератор
 Аватар для Lord_Voodoo
8785 / 2538 / 144
Регистрация: 07.03.2007
Сообщений: 11,873
28.07.2010, 23:40
Delphi
1
2
3
4
while not Query.Eof do begin
  // манипуляции с данными
  Query.Next;
end;
0
 Аватар для arni
914 / 879 / 62
Регистрация: 06.01.2010
Сообщений: 2,367
Записей в блоге: 6
29.07.2010, 07:07
Цитата Сообщение от Прохор Посмотреть сообщение
Вот мой листинг, проблема в том что во время чтения даты с базы читается и сравнивается первая запись таблицы......Что делать ребята, подскажите.....
Увы, даже если довести этот код до ума, на выходе получим печальный пример навигационного подхода к работе с БД. По уму, вся фильтрация должна происходить силами SQL, а не условными операторами внутри дельфового курсора.
0
1263 / 706 / 62
Регистрация: 21.12.2009
Сообщений: 2,256
29.07.2010, 07:50
Прохор, Вам надо внимательно посмотреть на то, что посоветовал Вам arni в предпоследнем посте с екстрактами. Посмотрите и подумайте
0
 Аватар для Romantik_FM
324 / 316 / 84
Регистрация: 03.03.2010
Сообщений: 1,364
29.07.2010, 14:07
Delphi
1
2
3
4
5
6
7
dat:=datetostr(now);
while not(DM.ADOQuery3.eof) do
Begin
if DM.ADOQuery3dob.Value = strtodate(dat) then
ShowMessage(DM.ADOQuery3fio.Value+#13+Datetostr(DM.ADOQuery3dob.Value));
DM.ADOQuery3.Next;
End;
Я сделал так и всё работает.

Добавлено через 19 минут
Вот цикл


Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
    while not (ADOTable2.Eof) do begin
  For i:=1950 to Year do
   begin
    dat:='#'+IntToStr(i)+'/'+IntTOStr(Month)+'/'+IntToStr(day)+'#';
    ADOQuery2.SQL.Text:='select * from people where dob=' + dat;
    ADOQuery2.Active:=true;
    if ADOQuery2dob.Text<>'' then
    ShowMessage('Сегодня день рождения у '+#13+ADOQuery2fio.Text);
    ADOQuery2.Next;
   end;
    ADOQuery2.Active:=false;
    ADOQuery2.SQL.Text:='select * from people where (group='''+gru+''')';
    ADOQuery2.Active:=true;
    exit;
  end;
0
 Аватар для arni
914 / 879 / 62
Регистрация: 06.01.2010
Сообщений: 2,367
Записей в блоге: 6
29.07.2010, 14:34
Цитата Сообщение от Romantik_FM Посмотреть сообщение
Я сделал так и всё работает.
Этот код лучше бы никому не показывать.
0
 Аватар для Romantik_FM
324 / 316 / 84
Регистрация: 03.03.2010
Сообщений: 1,364
29.07.2010, 20:43
И что там не так что показывать не стоит? Работае прекрасно!!!
0
 Аватар для arni
914 / 879 / 62
Регистрация: 06.01.2010
Сообщений: 2,367
Записей в блоге: 6
29.07.2010, 22:43
Цитата Сообщение от Romantik_FM Посмотреть сообщение
И что там не так что показывать не стоит? Работае прекрасно!!!
ну если есть желание, то можно обсудить.
я привел в порядок переносы, чтобы блоки лучше было видно
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
while not (ADOTable2.Eof) do begin //Что это за таблица? Она более не встречается. Зачем её перебирать? 
  For i:=1950 to Year do //Предлагаете 60 итераций вместо одного вызова? А почему именины тех, кому за 60 годков решили выкинуть?
  begin
    dat:='#'+IntToStr(i)+'/'+IntTOStr(Month)+'/'+IntToStr(day)+'#'; //"жесткий" формат даты предлагете?  это не всегда может работать
    ADOQuery2.SQL.Text:='select * from people where dob=' + dat; //Игнорируете переменные
    ADOQuery2.Active:=true; //А где предварительное закрытие датасета? И это в цикле-то ...
    if ADOQuery2dob.Text<>'' then //Проверка существование записи и заполнения поля делается по другому
      ShowMessage('Сегодня день рождения у '+#13+ADOQuery2fio.Text);//Вместо того, чтобы показать список именниников, выкидываете по одному окну на каждого? А если их 100?
    ADOQuery2.Next; //Отлично, есть Next. А где парный ему while ?
  end;
  ADOQuery2.Active:=false;
  ADOQuery2.SQL.Text:='select * from people where (group='''+gru+''')'; //это что?
  ADOQuery2.Active:=true;
  exit; //А это для чего?
  //Где вызов Next, раз уж мы ADOTable2 крутим? Бесконечный цикл.
end;
0
 Аватар для Romantik_FM
324 / 316 / 84
Регистрация: 03.03.2010
Сообщений: 1,364
29.07.2010, 22:51
Как вывести список именниников если их 100 я не сумел. Просили как проверить наличие их это работает. А цикл с 1950 года я делал потому что у меня нет друзей старше этого .
0
1263 / 706 / 62
Регистрация: 21.12.2009
Сообщений: 2,256
30.07.2010, 06:42
Цитата Сообщение от Romantik_FM Посмотреть сообщение
потому что у меня нет друзей старше этого
А если появятся. Не все еще вымерли!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
30.07.2010, 06:42
Помогаю со студенческими работами здесь

DELPHI+DLL+ системное меню
Добрый вечер Дамы и Господа! Я ищу решение небольшой проблемы, думаю, что оно не очень сложное, но найти четких вариантов не могу. ...

График количество-время, где время разбито в несколько полей
Собсна, есть таблица с полями: День; Час; Минута; Количество; Все числовые. Есть DBChart. Задача заключается в том, чтобы...

Ввести время и от него отнять системное время
Необходимо ввести время и от него отнять системное время,необходимо сделать так Введите часы : 17 минуты : 00 и результат к примеру...

Системное время
Добрый вечер. Интересует работа строк: mov ax,es: и mov ax,es: В ax заносится системное время для es:. А для es: системное время +5 чего?...

Системное время
Здравствуйте! Проблема такая: У нас в организации своя локальная сеть. Есть некий пользователь, его системное время показывает на 9...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru