Поиск:

Ответ в темуСоздание новой темы Создание опроса
> как отловить кто дату когда у человека день рожден, Paradox,BDE 
:(
    Опции темы
Berliner
Дата 18.8.2005, 13:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 803
Регистрация: 18.5.2005

Репутация: нет
Всего: 2



Здраствуйте вот такая ситуация!
Есть таблица(Paradox "people.db")
В ней поля
Фамилия
Имя
Навыки
Дата рождения тип Date

как сделать так чтобы пользователь ввел период(2 даты) в 2 поля едит1 и едит2
задал например 1.02.2005 по 28.02.2005 и ком нашел у кого день рождения в этом месяце

подскажите самый простой вариант пожалуста

PM   Вверх
Pakshin A. S.
Дата 18.8.2005, 15:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 5056
Регистрация: 16.2.2003

Репутация: 2
Всего: 61



Код

with query1 do
 begin
  Close;
  SQL.Text:='SELECT * FROM "people.db" WHERE BirthDate BETWEEN ''' + Edit1.Text + ''' AND ''' + Edit2.Text + ''';';
  Open;
 end;

PM   Вверх
Guest
Дата 18.8.2005, 23:04 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Спасибо за помощь!
Опс я тоже так думал! НО.....
по этому запросу компьютер выберет людей которые родились с и по
Например с 1.08.2005 по 31.08.2005 и выберет тех людей которые родились в этот промежутое - это хорошо
но надо выбрать и поздравить сех людей которые родились в Августе! и тех кому 25, 50,21 и т.д. всех у кого день рождения в этом периоде с 1.08.2005 по 31.08.2005
  Вверх
Guest
Дата 18.8.2005, 23:12 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











А не только те которые родились в этом месяце
А иначе с 1.08.2005 по 31.08.2005 отберет только младенцев а поздравить других людей постарше?
Спасиб за внимание
  Вверх
bursa
Дата 19.8.2005, 08:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 25.2.2005
Где: Липецк

Репутация: 1
Всего: 1



В теме http://forum.vingrad.ru/index.php?showtopic=61283 уже было.
Исправь код SergeBS на CalcDay := FormatDateTime('mmdd', DateFld);
т.е. месяцы вперед.

И фильтруй Query1.Filter:='CalcDay>=+''''+'0106'+''''+ and Query1.Filter<+''''+'0107'+'''';
PM MAIL   Вверх
Pakshin A. S.
Дата 19.8.2005, 08:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 5056
Регистрация: 16.2.2003

Репутация: 2
Всего: 61



Цитата(Guest @ 19.8.2005, 00:04)
Спасибо за помощь!
Опс я тоже так думал! НО.....
по этому запросу компьютер выберет людей которые родились с и по
Например с 1.08.2005 по 31.08.2005 и выберет тех людей которые родились в этот промежутое - это хорошо
но надо выбрать и поздравить сех людей которые родились в Августе! и тех кому 25, 50,21 и т.д. всех у кого день рождения в этом периоде с 1.08.2005 по 31.08.2005


Цитата(Guest @ 19.8.2005, 00:12)
А не только те которые родились в этом месяце
А иначе с 1.08.2005 по 31.08.2005 отберет только младенцев а поздравить других людей постарше?
Спасиб за внимание

Что-то непонятно....
По-полочкам: нам нужно выбрать всех людей, у кого днюха в данном промежутке, но нам нужно всех поздравлять или только тех, кто старше какого-то возраста? Или нам нужно выбрать всех, кому "за 30" и всех, у кого днюха в данном промежутке...
PM   Вверх
Berliner
Дата 19.8.2005, 11:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 803
Регистрация: 18.5.2005

Репутация: нет
Всего: 2



для Pakshin Нужно:
Код


выбрать всех людей, у кого днюха в данном промежутке


вводим в одно тесковое поле дату с а в другое текстовое поле дату по, по нажатию ктопки чтобы отловило людей у кого день рождения в данном промежутке smile сильно нада- помогите пожалуста



Код

 http://forum.vingrad.ru/index.php?showtopic=61283

для bursa
Спасиб за ссылку но я мало что понял ты можешь мне поджробнее каждую строку кода пояснить(если не трудно) и где там правильный код smile
PM   Вверх
bursa
Дата 19.8.2005, 15:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 98
Регистрация: 25.2.2005
Где: Липецк

Репутация: 1
Всего: 1



Создаешь вычисляемое поле CalcDay
На обработчике OnCalcField
Цитата(SergeBS @ 17.8.2005, 15:41)

procedure xxx.yyyy.OnCalcField;
begin
CalcDay := FormatDateTime('ddmm', DateFld);
end;
Где-то еще:
FilterStr := FormatDateTime('ddmm', now);


И меняешь

Цитата(bursa @ 19.8.2005, 08:33)

Исправь код SergeBS на CalcDay := FormatDateTime('mmdd', DateFld);
т.е. месяцы вперед.
И фильтруй Query1.Filter:='CalcDay>=+''''+'0106'+''''+ and Query1.Filter<+''''+'0107'+'''';


Месяцы вперед, чтобы,к примеру, 7 января было меньше 3 апреля, т.к.
'0107'<'0403'
а не наоборот
'0701'>'0304'
PM MAIL   Вверх
Pakshin A. S.
Дата 19.8.2005, 16:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 5056
Регистрация: 16.2.2003

Репутация: 2
Всего: 61



Цитата(Berliner @ 19.8.2005, 12:10)
выбрать всех людей, у кого днюха в данном промежутке


А это что?


Цитата(Pakshin @ 18.8.2005, 16:15)
with query1 do
begin
  Close;
  SQL.Text:='SELECT * FROM "people.db" WHERE BirthDate BETWEEN ''' + Edit1.Text + ''' AND ''' + Edit2.Text + ''';';
  Open;
end;


Выбор только тех полей, где поле находтся в промежутке...
PM   Вверх
Berliner
Дата 19.8.2005, 19:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 803
Регистрация: 18.5.2005

Репутация: нет
Всего: 2




Код

with query1 do
begin
  Close;
  SQL.Text:='SELECT * FROM "people.db" WHERE BirthDate BETWEEN ''' + Edit1.Text + ''' AND ''' + Edit2.Text + ''';';
  Open;
end;



этот код выберет людей которые родились с даты введенной в текстовое поле1 и между датой введенной в текстовое поле2.

ЗАДАЧА ТАКАЯ: ПОЗДРАВИТЬ СОТРУДНИКОВ С ДНЕМ РОЖДЕНИЯ в таблице есть дата рождения. Например, секретарю надо поздравить тех которые родились в августе(ТОЛЬКО В АВГУСТЕ)! Приведенный запрос НЕ ВЫБЕРЕТ Иванова Ивана который родился 14 августа 1965 года (если задать с 01.08.2005) по (31.08.2005)
А если написать в полях с 1.01.1910 по 1.08.2005 года выберет всех которые родились и августе1938 и в апреле 1977 и мае1983 короче всех- из этого промежутка( А ВСЕХ НЕ НАДО НАДО ТЕХ КОТОРЫЕ РОДИЛИСЬ В АВГУСТЕ с 01.08. любого года по 31.08 любого года). Секретарю надо выбрать всех у которых день рождения в периоде ИСПОЛЬЗУЯ ТОЛЬКО ДАТУ И МЕСЯЦ- ИГНОРИРУЯ ГОД.
извините,а теперь понятно?


Добавлено @ 19:38
To bursa
а можно полный код и поподробнее(еще подробнее) как это задача решаема вместе с кодом плиз( правда еще книжку сегодня гляну) и логику( я логику решения задачи не понял) что код делает и сам код полный плиз Извините если достал
PM   Вверх
Berliner
Дата 19.8.2005, 19:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 803
Регистрация: 18.5.2005

Репутация: нет
Всего: 2



P.S. Еще раз коротко для прояснения ситуации

нужно чтобы программа показала кто родился за определенный период, в период будут включаться с "число, месяц" по "число, месяц" , но год -игнорировать. Игнорировать год -сделать период с "число, месяц" по "число,месяц" а года ,чтобы все в условие входили. Т.е. вылавливать -учитывая только дату и месяц рождения
PM   Вверх
offline
Дата 19.8.2005, 20:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 474
Регистрация: 7.2.2005

Репутация: 7
Всего: 7



не знаю как в Парадоксе, а в Аксесе это можно сделать так

Код

SELECT Таблица1.FIO, Str(Dat) AS DenRozhd FROM Таблица1
WHERE Str(Dat) Like "*.12.*"


т.е. пусть секретарь выбирает тоько месяц.
затем берешь пое даты и переводишь в строковую переменную а затем ищешь у кого месяц выбранный секрктадем, в примере декабрь (12) а затем можно уже использовать это поле как дату
АДОЗапрос....ASDate , кажись так. Но это все к Аксесу, не знаю, есть ли в ПАРАДОКСЕ ТАКАЯ ФУНКЦИЯ, НО ДУМАЮ ИДЕЯ ПОНЯТНА smile

поздно увидел твое дополнение касаемое даты. но и дату можно поставить например 23

Код

SELECT Таблица1.FIO, Str(Dat) AS DenRozhd FROM Таблица1
WHERE Str(Dat) Like "23.12.*"


Это сообщение отредактировал(а) kirilllius - 19.8.2005, 20:28
PM MAIL   Вверх
Berliner
Дата 19.8.2005, 22:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 803
Регистрация: 18.5.2005

Репутация: нет
Всего: 2



Спасиб а может кто знает как в парадоксе сделать?

Завтра буду пробывать реализоавть идею что написал kirilllius
PM   Вверх
Pakshin A. S.
Дата 20.8.2005, 08:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 5056
Регистрация: 16.2.2003

Репутация: 2
Всего: 61



Код

SELECT * FROM Table1 WHERE (EXTRACT(Date FROM BirthDay) BETWEEN Day1 AND Day2) and (EXTRACT(Month FROM BirthDay) BETWEEN Month1 AND Month2);

ТА тот случай, если не попрет вышесказанное...
PM   Вверх
Berliner
Дата 20.8.2005, 14:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 803
Регистрация: 18.5.2005

Репутация: нет
Всего: 2



для Pakshin:

Скажи пожалуста а как тут быть с синтексисом если я хочу чтобы промежуток дат задавался при помощи ввода с полей Edit1 и Edit2 надо в Query в Tparams добавлять :Day1 :Day2 :Month1 :Month2
Поясни плиз что есть что в запросе smile
PM   Вверх
Berliner
Дата 20.8.2005, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 803
Регистрация: 18.5.2005

Репутация: нет
Всего: 2



Извините если я задолбал. Мне сильно надо закончить эту программу smile
PM   Вверх
Berliner
Дата 20.8.2005, 15:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 803
Регистрация: 18.5.2005

Репутация: нет
Всего: 2



пытаюсь....
Вот так не работает smile
Код

SELECT * from "people.db"  
WHERE День_Рождения Str(Dat) Like 'Edit1.Text'%

PM   Вверх
offline
Дата 20.8.2005, 21:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 474
Регистрация: 7.2.2005

Репутация: 7
Всего: 7



очень просто есть ракая функция как DecodeDate(Date,Year,Month,Day) разбивает дату Date на год - Year, месяц - Month и день - Day
вот и все
DecodeDate(StrToDate(Edit1.Text),Year1,Month1,Day1);
DecodeDate(StrToDate(Edit2.Text),Year2,Month2,Day2);

Это сообщение отредактировал(а) kirilllius - 21.8.2005, 13:24
PM MAIL   Вверх
Berliner
Дата 20.8.2005, 22:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 803
Регистрация: 18.5.2005

Репутация: нет
Всего: 2



Спасибо только прежде всего у меня SQL запрос не работает

Код

SELECT * from "people.db"  
WHERE День_Рождения Str(Dat) Like 'Edit1.Text'%


Если что то не правильно

как надо?
PM   Вверх
offline
Дата 20.8.2005, 23:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 474
Регистрация: 7.2.2005

Репутация: 7
Всего: 7



тач что, в Парадоксе есть Str()?
PM MAIL   Вверх
Berliner
Дата 20.8.2005, 23:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 803
Регистрация: 18.5.2005

Репутация: нет
Всего: 2



Напиши подробнее как надо и что я неправильно делаю
PM   Вверх
offline
Дата 20.8.2005, 23:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 474
Регистрация: 7.2.2005

Репутация: 7
Всего: 7



ну есле там есть Str()

то попробуй так

Код

SELECT * FROM Таблица1
WHERE (((Str([Поле с датой])) Like "*.12.*"))



Код

ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('SELECT * FROM Таблица1');
ADOQuery1.SQL.Add('WHERE (((Str([Поле с датой])) = '+ QuotedStr(Edit1.Text) +'))');
ADOQuery1.Open;


Это сообщение отредактировал(а) kirilllius - 20.8.2005, 23:30
PM MAIL   Вверх
Berliner
Дата 20.8.2005, 23:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 803
Регистрация: 18.5.2005

Репутация: нет
Всего: 2



Вот кто0нить логику полностью раскрыл и написал что я неправильно делаю

И как надо плиз а если можно то вместе с кодом и пояснити пожалуста что куда ставить пожалуста
PM   Вверх
offline
Дата 20.8.2005, 23:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 474
Регистрация: 7.2.2005

Репутация: 7
Всего: 7



Дай базу на мыло

Это сообщение отредактировал(а) kirilllius - 20.8.2005, 23:23
PM MAIL   Вверх
Berliner
Дата 21.8.2005, 00:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 803
Регистрация: 18.5.2005

Репутация: нет
Всего: 2



спаиб мыло напиши а ио форумойскими примочками я плохо пользуюсь я тебе со своего мэйла вышлю
PM   Вверх
offline
Дата 21.8.2005, 12:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 474
Регистрация: 7.2.2005

Репутация: 7
Всего: 7



Код

Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add('SELECT * from people.db');
Query1.SQL.Add('WHERE Дата_рождения = "' + Edit1.Text + '"');
Query1.Open;

PM MAIL   Вверх
Guest
Дата 21.8.2005, 12:34 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











мне надо в текстовое поле чтобы ввести период с и по

а в этом запросе без ПЕРИОДА надо два текстовых попя( с и по)
  Вверх
Guest
Дата 21.8.2005, 12:35 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











тут типа between нужен
  Вверх
Berliner
Дата 21.8.2005, 12:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 803
Регистрация: 18.5.2005

Репутация: нет
Всего: 2



два предыдущих поста были мои
PM   Вверх
offline
Дата 21.8.2005, 13:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 474
Регистрация: 7.2.2005

Репутация: 7
Всего: 7



через две минуты все будет smile

Добавлено @ 13:28
Из справки Paradox
Цитата

Local SQL supports the EXTRACT() function for isolating a single numeric field from a date/time field on retrieval using the following syntax:

EXTRACT (extract_field FROM field_name)

For example, the following statement extracts the year value from a DATE field:

SELECT EXTRACT(YEAR FROM HIRE_DATE)
FROM EMPLOYEE

You can also extract MONTH, DAY, HOUR, MINUTE, and SECOND using this function.

Note: EXTRACT does not support the TIMEZONE_HOUR or TIMEZONE_MINUTE clauses.



Код

procedure TForm1.Button1Click(Sender: TObject);
var
 Year1,Month1,Day1,Year2,Month2,Day2 : Word;
begin
DecodeDate(StrToDate(Edit1.Text),Year1,Month1,Day1);
DecodeDate(StrToDate(Edit2.Text),Year2,Month2,Day2);
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add('SELECT * from people.db');
Query1.SQL.Add('WHERE (EXTRACT(DAY FROM Дата_рождения) BETWEEN ' + IntToStr(Day1) +  ' AND ' + IntToStr(Day2) +')');
Query1.SQL.Add('and (EXTRACT(MONTH FROM Дата_рождения) BETWEEN ' + IntToStr(Month1) +  ' AND ' + IntToStr(Month2) +')');
Query1.Open;
end;


Это опробованно на твоей базе 100% гарантия smile

Это сообщение отредактировал(а) kirilllius - 22.8.2005, 10:44
PM MAIL   Вверх
Berliner
Дата 21.8.2005, 13:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 803
Регистрация: 18.5.2005

Репутация: нет
Всего: 2



smile smile smile smile smile Спасибо тебе большое работает!!!!!!!!!
Спасиб что помог!!!!!
PM   Вверх
offline
Дата 21.8.2005, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 474
Регистрация: 7.2.2005

Репутация: 7
Всего: 7



smile
PM MAIL   Вверх
Страницы: (3) [Все] 1 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

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


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.1418 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.