Модераторы: Akina

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Отбор клиентов по дате рождения 
:(
    Опции темы
Vic
Дата 4.11.2004, 15:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



У кого есть желание и время, помогите, пожалуйста.

Есть база в Access. Есть таблица клиентов, куда, в том числе, введены даты рождения. Мне нужна процедура, которая бы отбирала тех клиентов, у которых сегодня день рождения.
То есть должны совпадать месяц и число с текущей датой, а год может отличаться.

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

Заранее всем спасибо.
PM MAIL   Вверх
boevik
Дата 4.11.2004, 15:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Vic, простой select:
Код

SELECT *
FROM Table1
WHERE month(birthday) = month(now) and day(birthday) = day(now)



--------------------
Никогда не говори никогда
PM MAIL WWW   Вверх
Vic
Дата 4.11.2004, 15:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Все гениальное просто.
Спасибо огромное, boevik.
Я с этим столько парилась, нет, чтоб сразу обратиться к знающим людям

PM MAIL   Вверх
Akina
Дата 4.11.2004, 15:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

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



Vic
1) завтра тебе понадобится отбирать тех у кого день рождения завтра-послезавтра (особенно в пятницу...) smile
Если категорически охота своими руками делать, то делай сразу по-человечески, а именно:

Код

SELECT *
FROM Table1
WHERE (Now - DateSerial(Year(Now), Month(birthday), Day(birthday))) BETWEEN 0 AND 2


2) Не лучше ли использовать готовые напоминалки?

Это сообщение отредактировал(а) Akina - 4.11.2004, 15:44


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Vic
Дата 4.11.2004, 15:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Я как-то давно искала готовые напоминалки, мне не подошло ничего. Не помню почему. На счет двух дней я подумаю. не уверена, что в этом есть необходимость. Правда мне удобнее с прошедшим поздравлять.
Тогда надо писать
BETWEEN -2 AND 0 ?
Может тогда будут конкреные решения для учета выходных. Честно говоря, для меня дни рождения на несколько дней неудобны


PM MAIL   Вверх
Akina
Дата 4.11.2004, 16:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

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



Цитата
Тогда надо писать
BETWEEN -2 AND 0 ?

может... я о принципе...
Добавлено @ 16:11
Цитата
для меня дни рождения на несколько дней неудобны

ну сделай order by

Цитата
Может тогда будут конкреные решения для учета выходных.

почему нет?

Это сообщение отредактировал(а) Akina - 4.11.2004, 16:09


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Vic
Дата 4.11.2004, 16:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата
Может тогда будут конкреные решения для учета выходных.


Это был вопрос smile . Я просто не правильно сформулировала. Может у кого-то есть конктретные предложения по поводу выходных?


PM MAIL   Вверх
boevik
Дата 4.11.2004, 16:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата
Цитата 
Может тогда будут конкреные решения для учета выходных.



Это был вопрос  . Я просто не правильно сформулировала. Может у кого-то есть конктретные предложения по поводу выходных?

Vic, поподробнее

Это сообщение отредактировал(а) boevik - 4.11.2004, 16:59


--------------------
Никогда не говори никогда
PM MAIL WWW   Вверх
Akina
Дата 4.11.2004, 17:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

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



Цитата
Может у кого-то есть конктретные предложения по поводу выходных?

а в чем сложности-то? получить день недели - не проблема, построить запрос в зависимости от оного - тоже...


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Vic
Дата 4.11.2004, 17:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Boevik, поподробнее легко.

В понедельник приходишь на работу и выдается список клиентов, у которых был ДР в субботу, воскресенье и в понедельник. Но в идеале надо, чтобы за три дня выдавался список только в понедельник, а во все остальные дни только за текущий день. Поэтому способ "BETWEEN 0 AND 2" является возможным, но не самым подходящим для меня.

Akina, Я конечно понимаю, что сложностей особенно нет для тебя, но я потрачу на это кучу времени. Поэтому я и спрашиваю в этом форуме. Это быстрее smile .
Так что имейте снисхождение к новичкам.
PM MAIL   Вверх
Akina
Дата 4.11.2004, 18:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

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



Vic
Как получить день недели - знаешь? не знаешь? попробуй format(now(),"w").
Как строить запрос в зависимости от дня недели - знаешь? не знаешь? попробуй if format(now(),"w") = vbMonday


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
boevik
Дата 4.11.2004, 23:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Vic, а если были праздники?
Может надо в программе запоминать когда (в какой день) последний раз заходили в программу и выдавать все дни рождения между этими датами?
Подумай над этим.


--------------------
Никогда не говори никогда
PM MAIL WWW   Вверх
Vic
Дата 5.11.2004, 10:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Вот свяжись только с профессионалами. Сразу начнут все усложнять smile
Все правильно, я подумаю над всем, что было предложенно
PM MAIL   Вверх
Akina
Дата 5.11.2004, 11:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

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



boevik smile smile smile


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
boevik
Дата 5.11.2004, 15:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Vic, извини, что усложняем тебе жизнь. smile



--------------------
Никогда не говори никогда
PM MAIL WWW   Вверх
Vic
Дата 9.11.2004, 17:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



И снова здравствуйте smile
От меня не так-то просто отделаться, так что напрягите мозги еще раз, пожалуйста. Может присоветуете что

Как можно реализовать идею, брошенную Akin'ей
Цитата
а если были праздники?
Может надо в программе запоминать когда (в какой день) последний раз заходили в программу и выдавать все дни рождения между этими датами?


Я создаю поле где хранится дата последнего входа в БД. Как создать процедуру, или SQL запрос, который бы проверял, вчера ли был последний вход, и если нет, то выдавал бы данные за все последние дни.
У меня следующий SQL запрос для вывода сегодняшних ДР:

Код

SELECT  [ФамилияАгента] & " " & [ИмяАгента] & " " & [ОтчествоАгента] AS ФИОагента, ДатаРожденияАгента, Пометки
FROM tblАгент
WHERE (((Month([ДатаРожденияАгента]))=Month(Now())) AND ((Day([ДатаРожденияАгента]))=Day(Now())))
UNION SELECT [ФамилияКонтрагента] & " " & [ИмяКонтрагента] & " " & [ОтчествоКонтрагента] AS ФИОконтрагента, ДатаРожденияКонтрагента, Пометки
FROM tblКонтрагент
WHERE (((Month([ДатаРожденияКонтрагента]))=Month(Now())) AND ((Day([ДатаРожденияКонтрагента]))=Day(Now())));


Буду признательна за идеи или готовые решения
PM MAIL   Вверх
Akina
Дата 9.11.2004, 18:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

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



Vic
Код

BETWEEN LastDatabaseAccessDate AND Now()

Или я не понимаю вопроса?


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
boevik
Дата 9.11.2004, 19:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Позволю себе дополнить немного мысль Akina

Код

SELECT  [ФамилияАгента] & " " & [ИмяАгента] & " " & [ОтчествоАгента] AS ФИОагента, ДатаРожденияАгента, Пометки
FROM tblАгент
WHERE DateSerial(Year(Now), Month(ДатаРожденияАгента), Day(ДатаРожденияАгента)) BETWEEN LastDatabaseAccessDate AND Now()

анологично и второй select.


--------------------
Никогда не говори никогда
PM MAIL WWW   Вверх
Vic
Дата 10.11.2004, 13:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Дополнила я запрос предложенным образом, на что мне было выдано следующее сообщение:

Цитата
Выражение неверно введено или является слишком сложным для расчета. Например, числовое выражение может содержать слишком много элементов. Попытайтесь упростить выражения, определив его части как переменные.


Может, будут предложения по упрощению выражения smile
PM MAIL   Вверх
Akina
Дата 10.11.2004, 14:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

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



Vic
Поясняю - Аксесс хочет, чтобы вместо

strSQL=" .... WHERE (((Month([ДатаРожденияАгента]))=Month(Now())) ....."
DoCMD.RunSQL

было

strTmp=str(Month(Now()))
strSQL=" .... WHERE (((Month([ДатаРожденияАгента]))=" & strTmp & " ....."
DoCMD.RunSQL

или хотя бы

strSQL=" .... WHERE (((Month([ДатаРожденияАгента]))=" & str(Month(Now())) & " ....."
DoCMD.RunSQL


Это сообщение отредактировал(а) Akina - 10.11.2004, 14:06


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
boevik
Дата 10.11.2004, 14:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Vic, покажи select.


--------------------
Никогда не говори никогда
PM MAIL WWW   Вверх
Vic
Дата 10.11.2004, 14:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Select выглядит следующим образом:

Цитата
SELECT  [ФамилияАгента] & " " & [ИмяАгента] & " " & [ОтчествоАгента] AS ФИОагента, ДатаРожденияАгента, Пометки
FROM tblАгент
WHERE DateSerial(Year(Now), Month(ДатаРожденияАгента), Day(ДатаРожденияАгента)) BETWEEN LastDatabaseAccessDate AND Now()
UNION SELECT [ФамилияКонтрагента] & " " & [ИмяКонтрагента] & " " & [ОтчествоКонтрагента] AS ФИОконтрагента, ДатаРожденияКонтрагента, Пометки
FROM tblКонтрагент
WHERE DateSerial(Year(Now), Month(ДатаРожденияКонтрагента), Day(ДатаРожденияКонтрагента)) BETWEEN LastDatabaseAccessDate AND Now();


Akina, сейчас попробую разобраться в том, что ты написал, а то до меня пока не очень доходит. Я все писала в запросе на SQL, VBA вообще не использовала, поэтому я пока не понимаю, как применть то, что ты написал.
PM MAIL   Вверх
boevik
Дата 10.11.2004, 15:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Vic, LastDatabaseAccessDate это переменная в проге содержащая дату последнего обращения к базе. Её надо подставить в SQL.
Т.е. конечный SQL должен выглядеть примерно так

Код

SELECT  [ФамилияАгента] & " " & [ИмяАгента] & " " & [ОтчествоАгента] AS ФИОагента, ДатаРожденияАгента, Пометки
FROM tblАгент
WHERE DateSerial(Year(Now), Month(ДатаРожденияАгента), Day(ДатаРожденияАгента)) BETWEEN #10/30/2004# AND Now()

Обрати внимание на формат даты и на решетки (#)


--------------------
Никогда не говори никогда
PM MAIL WWW   Вверх
Vic
Дата 10.11.2004, 16:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Это я поняла. Такое сообщение выдается, когда я уже ввела LastDatabaseAccessDate.
PM MAIL   Вверх
boevik
Дата 10.11.2004, 16:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Vic, тогда покажи кусок кода который формирует и отправляет запрос.
И так же приложи получившийся SQL statment.
Всё должно работать, проверенно.


--------------------
Никогда не говори никогда
PM MAIL WWW   Вверх
Vic
Дата 10.11.2004, 16:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



У меня в данном случае вообще нет кода. Я просто создала SQL-запрос в Access и, когда я пытаюсь его выполнить, у меня сначала спрашивается LastDatabaseAccessDate, а потом выдается такое сообщение.

PM MAIL   Вверх
boevik
Дата 10.11.2004, 16:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Vic, это так и будет работать или ты пишешь какие то формы и код?
Попробуй это так, как должно быть в конечном виде.


--------------------
Никогда не говори никогда
PM MAIL WWW   Вверх
Guest
Дата 11.11.2004, 14:13 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Boevik, честно говоря, я не поняла твой последний вопрос.
А что касается предложенноженного запроса, то у меня по нему тоже есть вопросы.

Цитата
SELECT  [ФамилияАгента] & " " & [ИмяАгента] & " " & [ОтчествоАгента] AS ФИОагента, ДатаРожденияАгента, Пометки
FROM tblАгент
WHERE DateSerial(Year(Now), Month(ДатаРожденияАгента), Day(ДатаРожденияАгента)) BETWEEN #10/30/2004# AND Now()


Как я понимаю, DateSerial возвращает некоторую дату. В данном случае эта такая дата, у которой год текущий, а месяц и число совпадают с днем и месяцем рождения агента.
Кроме того, здесь еще устанавливается ограничение, что DateSerial BETWEEN #10/30/2004# AND Now().
Я не понимаю, где в этом запросе сопоставляется, что надо выбрать именно тех агентов, у которых число и месяц рождения = DateSerial.
В моем понимании в предложенном запросе чего-то не зватает:
Select - выводятся некоторые данные об агенте
From - откуда выводятся эти данные
Where - выводится некоторое число, которое само по себе зависит от ДатыРожденияАгента, но никак не влияет на то, что выводится SELECTом

Не знаю, на сколько понятно то, что я написала, но в общем это все к тому, что у меня не работает этот запрос smile




  Вверх
Vic
Дата 11.11.2004, 14:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Упс, это я забыла зарегистрироваться
PM MAIL   Вверх
boevik
Дата 11.11.2004, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Хорошо, Vic, попробую объяснить.
С Select и From всё понятно.
Теперь про условие.
Нам надо отобрать всех агентов у которых день рождения попадает в промежуток времени от последнего входа до сегедняшнего дня.
Так появилось BETWEEN #10/30/2004# AND Now(), т.е зашли в базу в последний раз 30 октября.
Теперь дальше, каждый агент он родился в какой то год и они отличаются друг от друга.
Так давая устроим так, как будто они все родились в этом году, получилось DateSerial(Year(Now), Month(ДатаРожденияАгента), Day(ДатаРожденияАгента))

Вот в принципе и вся логика.


--------------------
Никогда не говори никогда
PM MAIL WWW   Вверх
Vic
Дата 11.11.2004, 17:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



У меня все равно не получается.
Ну ладно, буду пытаться smile
Спасибо большое за внимание к вопросу

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

Запрещается!

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

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

  • Литературу по VB обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.


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

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


 




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


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

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