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

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

Помогите с запросом - как посторить?.. [D6, Access]


Страницы:   1 2

Владий ©   (2003-09-03 15:27:00) 

Нужно отбирать дни рождения, рассчитывать количество полных лет, но я слабо продставляю - как это сделать...
Мыслилось, что так:

SELECT People.BD, People.Family, People.Name, People.Otch, People.Department
FROM People
WHERE (((People.BD) Between Month(Now())-4 And Month(Now())+4))
ORDER BY People.BD;

Ан нет -что-то не то...


Владий   (2003-09-04 14:26:00) [21]

Если вернуться к мысли:

SELECT Year(Now())-Year([bd]) AS CountYears, *
FROM People
WHERE DateSerial(0, Month(BD), Day(BD))
BETWEEN
CDate(DateSerial(0, Month(Now()), Day(Now()))-4)
AND
CDate(DateSerial(0, Month(Now()), Day(Now()))+4)
ORDER BY BD;


Убрав лишнююю скобку получаю сообщение:

"Несоответствие типов данных в выражении условия отбора"


Sandman25   (2003-09-04 11:32:00) [22]

Скобка сразу после CDate - я ее жирной написал, но почти не видно, поэтому словами объясняю.


Sandman25   (2003-09-04 11:30:00) [23]

[9] Владий © (04.09.03 09:02)

Там у Вас скобка лишняя в
CDate ((DateSerial(0, Month(Now()), Day(Now()))-4)


sniknik   (2003-09-04 10:25:00) [24]

Владий © (04.09.03 10:22) [10]
не учтено перехода между месяцами.

(у меня только переход года пропустит)


sniknik   (2003-09-04 10:23:00) [25]

не может быть, покажи как вызываеш. (тока не примерно, а копированием из программы где ошибка синтаксиса)


Владий   (2003-09-04 10:22:00) [26]

Блин... все решилось гораздо проще....


SELECT Year(Now())-Year([bd]) AS CountYears, *
FROM People
WHERE (((Day(Now())-Day([BD]))<=4 And (Day(Now())-Day([BD]))>=0) AND ((Month(Now()))=Month([bd])))
ORDER BY People.BD;


Владий   (2003-09-04 09:02:00) [27]

Даже не знаю что сказать... Access 2002, из программы работаю через АДО....
А

SELECT BD, Family, Name, Otch, Department FROM People
WHERE DateSerial(0, Month(BD), Day(BD))
BETWEEN
CDate((DateSerial(0, Month(Now()), Day(Now()))-4)
AND
CDate(DateSerial(0, Month(Now()), Day(Now()))+4)
ORDER BY BD;

вызывает ругань на ошибку синтаксиса...


sniknik   (2003-09-03 23:42:00) [28]

ааа! .... BDE, или аксесс старый?(скобочка в конце запроса и идиотская вставка имени таблици в однозначном запросе из 1 таблици, явно из визарда) предупреждать надо. переходи на ADO, обнови Access(Jet), если последнее средство не поможет (подогнать типы) так
SELECT BD, Family, Name, Otch, Department FROM People
WHERE DateSerial(0, Month(BD), Day(BD))
BETWEEN
CDate((DateSerial(0, Month(Now()), Day(Now()))-4)
AND
CDate(DateSerial(0, Month(Now()), Day(Now()))+4)
ORDER BY BD

но вобще, проверил, и без подгонки работает.


Владий   (2003-09-03 18:38:00) [29]

"Несоотетствие типов даных в выражении условия отбора"...

SELECT People.BD, People.Family, People.Name, People.Otch, People.Department
FROM People
WHERE DateSerial(0, Month(BD), Day(BD)) BETWEEN DateSerial(0, Month(Now()), Day(Now()))-4 AND DateSerial(0, Month(Now()), Day(Now()))+4
ORDER BY People.BD;


sniknik   (2003-09-03 18:26:00) [30]

нда, видать високосные года в расчеты вмешиваются (хотел предупредить что не учел ... но :()
тогда попробуй так
WHERE DateSerial(0, Month(DB), Day(DB)) BETWEEN DateSerial(0, Month(Now()), Day(Now()))-4 AND DateSerial(0, Month(Now()), Day(Now()))+4


Sandman25   (2003-09-03 18:25:00) [31]

ИМХО, надо все перевести в количество дней от начала года и только потом сравнивать. Иначе, боюсь, не получится - слишком сложно обрабатывать переходы между месяцами.


Владий   (2003-09-03 18:03:00) [32]

Не работает... Выдает пустую выборку...
Посмотрел. Понял, что обхеденил в описании 2 задачи...

1. Сделать выборку по Дате и Месяцу (без учета Года).
В отдельности по дате, в отдельности по году - получается, вместе - нет...
2. Рассчитать разницу лет - тут, вроде, понятно как считать...


sniknik   (2003-09-03 17:41:00) [33]

условие
WHERE Int(BD-Year(BD)) BETWEEN Int(Now()-Year(Now()))-4 AND Int(Now()-Year(Now()))+4

(int у поля на случай если и минуты рождения занесены)
количество лет проще просто Year(Now())-Year(BD)


Владий   (2003-09-03 17:27:00) [34]

Словами все проще, нежели в действительности - есть таблица, гда одно из полей -День рождения (дд.мм.гггг). Нужно сделать выборку - +/- 4 дня от текущей даты + расчет соклько же лет исполнится человеку... Т.е. как я понимаю - вначале выборка по дате (исключая значение года), затем - расчет округленного значения разницы лет между текущим годом и годом рожения человека...


sniknik   (2003-09-03 17:22:00) [35]

плюс минус четыре месяца, итого восемь. (??) чего уж там, добавь по паре с каждой стороны и выкидывай условие нафиг. ;о))

обьясни на словах чего хочеш, и какие данные где, и что не то.

и чем отличаются жирные года от полных лет? ;о)))


Страницы:   1 2

Наверх

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