Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft Access Новый топик    Ответить
 Индикация события для оператора  [new]
Alex37
Member

Откуда: г. Тверь
Сообщений: 212
Всем привет!

Хотел спросить у знатоков, каким лучше образом привлечь внимание оператора, если в базе данных наступило какое-либо событие. К примеру, есть таблица со столбцами "ФИО", "День рождения"...
Сейчас это решается запуском запроса при открытии определённой формы (FormaDR):
SELECT Заказы.ФИО, Заказы.[Дата рождения], IIf((Month(Now())>Month([Дата Рождения]) Or 
(Month(Now())=Month([Дата Рождения])) And (Day(Now())>Day([Дата Рождения]) Or 
Day(Now())=Day([Дата Рождения]))),Year(Now())-Year([Дата Рождения]),Year(Now())-Year([Дата Рождения])-1) AS Возраст
FROM Заказы
WHERE (((Format([Дата рождения],"mmdd"))=Format(Date(),"mmdd")));

В таблице отображается ФИО, дата рождения и вычисляется возраст.
Но далеко не каждый день наступает событие, поэтому открывается пустая таблица запроса.

Как исключить показ пустой таблицы?

Access 2003.
5 фев 20, 11:15    [22073477]     Ответить | Цитировать Сообщить модератору
 Re: Индикация события для оператора  [new]
ROI
Member

Откуда: г. Тюмень
Сообщений: 1870
Alex37
Всем привет!

Хотел спросить у знатоков, каким лучше образом привлечь внимание оператора, если в базе данных наступило какое-либо событие. К примеру, есть таблица со столбцами "ФИО", "День рождения"...
Сейчас это решается запуском запроса при открытии определённой формы (FormaDR):
SELECT Заказы.ФИО, Заказы.[Дата рождения], IIf((Month(Now())>Month([Дата Рождения]) Or 
(Month(Now())=Month([Дата Рождения])) And (Day(Now())>Day([Дата Рождения]) Or 
Day(Now())=Day([Дата Рождения]))),Year(Now())-Year([Дата Рождения]),Year(Now())-Year([Дата Рождения])-1) AS Возраст
FROM Заказы
WHERE (((Format([Дата рождения],"mmdd"))=Format(Date(),"mmdd")));


В таблице отображается ФИО, дата рождения и вычисляется возраст.
Но далеко не каждый день наступает событие, поэтому открывается пустая таблица запроса.

Как исключить показ пустой таблицы?

Access 2003.

в форме проверка count
если 0 то не показывать таблицу
5 фев 20, 11:32    [22073497]     Ответить | Цитировать Сообщить модератору
 Re: Индикация события для оператора  [new]
Alex37
Member

Откуда: г. Тверь
Сообщений: 212
ROI,
Спасибо за ответ. Буду думать...
5 фев 20, 11:58    [22073537]     Ответить | Цитировать Сообщить модератору
 Re: Индикация события для оператора  [new]
Кривцов Анатолий
Member

Откуда:
Сообщений: 453
Alex37, что-то вы накрутили в запросе. По условию в WHERE он возвращает исключительно именинников сегодня т.е. месяц и день совпадают), а в IIf у вас - если месяц больше или если месяц тот же, но день больше... Зачем?
5 фев 20, 12:20    [22073582]     Ответить | Цитировать Сообщить модератору
 Re: Индикация события для оператора  [new]
Alex37
Member

Откуда: г. Тверь
Сообщений: 212
Кривцов Анатолий,
Все правильно.
Запрос выдает список именинников СЕГОДНЯ. Вроде правильно всё работает. Проверял неоднократно. Ошибок не было.
Конечно, длинновато получилось...

Сообщение было отредактировано: 5 фев 20, 12:25
5 фев 20, 12:24    [22073592]     Ответить | Цитировать Сообщить модератору
 Re: Индикация события для оператора  [new]
Кривцов Анатолий
Member

Откуда:
Сообщений: 453
Alex37
Все правильно.
Запрос выдает список именинников СЕГОДНЯ. Вроде правильно всё работает.
Я о том, что IIF здесь вообще не нужен. Просто Year(Date())-Year([Дата Рождения]
Видимо запрос задумывался без WHERE и показывал данные по всем людям.

А конкретно по вопросу, как вариант, можно при запуске БД выполнить DLookup или DCount с условием как в запросе. Если что-то возвращает - сообщить или открыть форму.
5 фев 20, 12:42    [22073619]     Ответить | Цитировать Сообщить модератору
 Re: Индикация события для оператора  [new]
Alex37
Member

Откуда: г. Тверь
Сообщений: 212
Кривцов Анатолий
Alex37
Все правильно.
Запрос выдает список именинников СЕГОДНЯ. Вроде правильно всё работает.
Я о том, что IIF здесь вообще не нужен. Просто Year(Date())-Year([Дата Рождения]
Видимо запрос задумывался без WHERE и показывал данные по всем людям.

А конкретно по вопросу, как вариант, можно при запуске БД выполнить DLookup или DCount с условием как в запросе. Если что-то возвращает - сообщить или открыть форму.

Да, это я запрос на лету переделывал для форума, поторопился. Спасибо.
SELECT Заказы.ФИО, Заказы.[Дата рождения], Year(Date())-Year([Дата Рождения]) AS Возраст
FROM Заказы
WHERE (((Format([Дата рождения],"mmdd"))=Format(Date(),"mmdd")));

Вечером попробую с DCount решить свой вопрос. В голове уже сформировались разные варианты. Надо пробовать.
Спасибо за помощь!

Сообщение было отредактировано: 5 фев 20, 12:54
5 фев 20, 12:47    [22073628]     Ответить | Цитировать Сообщить модератору
 Re: Индикация события для оператора  [new]
Alex37
Member

Откуда: г. Тверь
Сообщений: 212
Получилось вот так - на кнопку открытия одной из форм приписан небольшой код:
...
    Dim stDocName As String
    Dim stDocName2 As String
    Dim stLinkCriteria As String

    stDocName = "fAnalitika"
    DoCmd.OpenForm stDocName, , , stLinkCriteria
    
    'Запуск запроса/сообщения, если сегодня есть дни рождения
    stDocName2 = "зДеньРожденияСегодня"           'запрос
    If DCount("[ФИО]", stDocName2) > 0 Then
            'DoCmd.OpenQuery stDocName2, acNormal, acEdit  'выполнить запрос и показать
            MsgBox "Сегодня у нас день рождения!", 48, "Внимание!"
    End If
...

Работает! Выдает сообщение (или запускает запрос на выполнение) лишь когда сегодня, хотя бы у одного человека из списка, наступил день рождения.

Спасибо всем за помощь!
5 фев 20, 21:47    [22074222]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft Access Ответить