Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Подсчет уникальных значений в ленточной форме (Access) / 13 сообщений из 13, страница 1 из 1
12.01.2017, 11:58
    #39383002
merkush
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчет уникальных значений в ленточной форме (Access)
Добрый день!
Помогите, пожалуйста, решить задачку! Есть ленточные формы, в которые ежедневно заводятся данные для логистики - куда поедет водитель и что он должен отвезти-забрать. Сделал такую форму с двумя подчиненными ленточными, которую заполняют менеджеры:

В каждой форме подсчитывается количество записей по полю со списком "Пункт назначения", результат выводится в поле "Всего записей" а суммарное количество этих пунктов по двум формам выводится в главной форме в поле "Всего пунктов".
На данном примере программа насчитала 8 пунктов, все верно. Но у водителя фактически получается 6 поездок, т.к. два адреса во второй форме повторяются (эти пункты заводили либо разные менеджеры, либо было два задания на этом адресе).
Я перелопатил кучу форумов, включаю англоязычные, в поисках решения этой задачи. Пробовал с DCount что-то мутить - не получается! В основном предлагается сделать два запроса - один с группировкой по полю "Пункт назначения", а второй - на основе первого запроса, с подсчетом уже сгруппированных "Пунктов назначения". Теория понятна... как сделать и куда повесить эти два запроса? Или можно объединить их в один? Помогите решить!
...
Рейтинг: 0 / 0
12.01.2017, 13:45
    #39383139
HandKot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчет уникальных значений в ленточной форме (Access)
merkush,
а как Вы получили значение в поле "всего записей" ?
направление
...
Рейтинг: 0 / 0
12.01.2017, 14:30
    #39383180
merkush
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчет уникальных значений в ленточной форме (Access)
HandKotа как Вы получили значение в поле "всего записей" ?
Тупо =Count([Пункт назначения])

Модератор: Тема перенесена из форума "Microsoft Office".
...
Рейтинг: 0 / 0
12.01.2017, 15:10
    #39383237
merkush
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчет уникальных значений в ленточной форме (Access)
В тырнете нашел пример, создал свой отчет, в котором указал, что данные нужно считать только за дату, указанную в главной форме:
SELECT Count([Пункт назначения]) AS УникальныеПоездки
FROM (SELECT [Пункт назначения] FROM [Логистика Клиенты Подробно] WHERE ([Логистика Клиенты Подробно].[Дата] = Forms![Логистика].[Дата]) GROUP BY [Логистика Клиенты Подробно].[Пункт назначения]) AS t2;

Отчет исправно работает, запрашивая при запуске дату, или если форма открыта, то сразу открывается и считает за нужную дату уникальные записи (пока отрабатываю на первой подчиненной форме "Логистика Клиенты Подробно").
Сделал функцию func1 в модуле:
Public Function func1()
func1 = CurrentProject.Connection.Execute("SELECT Count([Пункт назначения]) AS УникальныеПоездки
FROM (SELECT [Пункт назначения] FROM [Логистика Клиенты Подробно] WHERE ([Логистика Клиенты Подробно].[Дата] = Forms![Логистика].[Дата]) GROUP BY [Логистика Клиенты Подробно].[Пункт назначения]) AS t2;").Fields(0)
End Function

На поле в форме, где должны считаться уникальные значения, в данных указал = func1()
При запуске формы возникает ошибка: "Отсутствует значение одного или нескольких требуемых параметров
Это я так понимаю, что функции неоткуда взять дату, т.к. она выставляется в форме (текущая) естесственно, после ее открытия.)
Куда копать дальше?
...
Рейтинг: 0 / 0
12.01.2017, 15:12
    #39383241
MrShin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчет уникальных значений в ленточной форме (Access)
Создаете запрос, который возвращает всго одно значение - Count(*) с группировкой по нужному полю , а в поле формы пишете функцию DLookup, которая читает это значение.
...
Рейтинг: 0 / 0
12.01.2017, 15:52
    #39383292
__Michelle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчет уникальных значений в ленточной форме (Access)
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
Public Function func1()
  Dim S AS String
  S = "SELECT Count(*) " & _
      "FROM (SELECT DISTINCT [Пункт назначения] " & _
      "FROM [Логистика Клиенты Подробно] " & _
      IIf(IsNull(Forms![Логистика].[Дата]), "", 
      "WHERE [Дата] = " & Format(Forms![Логистика].[Дата], "\#mm\/dd\/yyyy\#")) & ")"
  func1 = CurrentDb.Execute(S).Fields(0)
End Function
...
Рейтинг: 0 / 0
12.01.2017, 21:18
    #39383588
merkush
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчет уникальных значений в ленточной форме (Access)
Большое спасибо всем откликнувшимся!
Сегодня не было возможности попробовать предложенные аарианты.
Завтра обязательно отпишусь!
...
Рейтинг: 0 / 0
13.01.2017, 07:49
    #39383717
HandKot
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчет уникальных значений в ленточной форме (Access)
merkushHandKotа как Вы получили значение в поле "всего записей" ?
Тупо =Count([Пункт назначения])

Модератор: Тема перенесена из форума "Microsoft Office".
Если есть ключевое поле, то можно так
Код: sql
1.
=DCount("*";"МОЯ ТАБЛИЦА";"[Ключевое поле] IN (SELECT MIN([Ключевое поле]) FROM [МОЯ ТАБЛИЦА] GROUP BY  [Пункт назначения])")



но по мне быстрее и лучше будет сделать отдельный запрос с подсчетом уникальных значения и его привязать к полю
Код: sql
1.
2.
SELECT COUNT(*) FROM (
SELECT  [Пункт назначения] FROM [МОЯ ТАБЛИЦА] GROUP BY  [Пункт назначения]) AS A
...
Рейтинг: 0 / 0
13.01.2017, 13:57
    #39384154
merkush
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчет уникальных значений в ленточной форме (Access)
__Michelle,

Все-таки оно заработало!
Огромное вам спасибо за помощь! Воткнул ваш код, ругнулась при запуске формы: "Expected function or variable".
Засунул запрос из вашего кода в тот вариант, который сам мастырил:
Public Function func3()
func3 = CurrentProject.Connection.Execute("SELECT Count(*) " & _
"FROM (SELECT DISTINCT [Пункт назначения] " & _
"FROM [Логистика Клиенты Подробно] " & _
IIf(IsNull(Forms![Логистика].[Дата]), "",
"WHERE [Дата] = " & Format(Forms![Логистика].[Дата], "\#mm\/dd\/yyyy\#")) & ")""").Fields(0)
End Function

И ВСЁ ЗАРАБОТАЛО!!!! Почему ругалась в исходном виде так и не понял, но без вашей помощи еще долго бы бился. В VBA пока на уровне Шарикова).
P.S. Какую бы литературу почитать именно про VBA? Посоветуйте!)

В общем, мой вопрос решен! Всех со Старым Новым Годом!
...
Рейтинг: 0 / 0
13.01.2017, 15:18
    #39384253
__Michelle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчет уникальных значений в ленточной форме (Access)
merkushКакую бы литературу почитать именно про VBA? У меня такая книга:
В.И.Король. Visual Basic 6.0, Visual Basic for Applications 6.0. Язык
программирования. Справочник с примерами. М.: Издательство КУДИЦ, 2000.
...
Рейтинг: 0 / 0
13.01.2017, 16:25
    #39384336
merkush
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчет уникальных значений в ленточной форме (Access)
Спасибо, посмотрю. Хотя это наверное для продвинутых пользователей уже.
...
Рейтинг: 0 / 0
13.01.2017, 16:46
    #39384358
__Michelle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчет уникальных значений в ленточной форме (Access)
Не для пользователей, а для разработчиков.
Хотя, уровни "пользования" условны.
Разработчик БД сам при этом является пользователем ПК и ОС, и т. д.
...
Рейтинг: 0 / 0
13.01.2017, 23:47
    #39384598
merkush
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подсчет уникальных значений в ленточной форме (Access)
__Michelle,

Конечно, для разработчиков. Просто под пользователями имел ввиду пользователей собственно Access, т.е. программистов)
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Подсчет уникальных значений в ленточной форме (Access) / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]