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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Отбор клиентов по дате рождения 
:(
    Опции темы
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   Вверх
Страницы: (3) Все 1 [2] 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "VB6"
Akina

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

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

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

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


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

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


 




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


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

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