powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Вопрос по агрегатным функциям и датам
16 сообщений из 16, страница 1 из 1
Вопрос по агрегатным функциям и датам
    #39958012
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет всем!
Постоянно натыкаюсь на проблемы с использованием агрегатных функций в VBA и использованием критериев в функциях типа дата.
Я решил свою проблему в принципе, но скорей методом подбора значений, нежели правилами. Вопрос думаю интересный.

Есть список строк в подчиненной форме, которые нужно считать по признаку одной даты:

Вот это выражение работает на домашнем компе, но не работает на рабочем:
Код: vbnet
1.
2.
dt = Me.dataNachalaReisa
MsgBox DCount("kodReisa", "t_reisi", "[dataNachalaReisa]=#" & Format(dt, "mm-dd-yyyy") & "#")



А вот это запускается на рабочем, но не работает на домашнем (причем именно с квадратными скобками в имени таблицы, если их убрать то не работает):

Код: vbnet
1.
2.
dt = Me.dataNachalaReisa
MsgBox DCount("[kodReisa]", "[t_reisi]", "[dataNachalaReisa]=#" & Format(dt, "dd/mm/yyyy") & "#")



Я проверил несколько раз, реально, база та же,специально пробовал на всех компах. Проверял несколько раз.
Почему то всегда приходится подкручивать , когда дело заходит об агрегатных функциях и условиях в них.
...
Рейтинг: 0 / 0
Вопрос по агрегатным функциям и датам
    #39958016
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Надо использовать функции, которые не зависят от локали.

Типа
Код: vbnet
1.
MsgBox DCount("kodReisa", "t_reisi", "[dataNachalaReisa]=CDate('" & Format(dt, "yyyy-mm-dd") & "')")
...
Рейтинг: 0 / 0
Вопрос по агрегатным функциям и датам
    #39958017
Фотография Joss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сразу классические вопросы:
Версия Windows дома и на работе? Разрядность?
Версия офиса дома и на работе? Разрядность?

У меня не возникало проблем с совместимостью если отлажен оператор.

У меня работал первый вариант. Функция не понимала квадратных скобок.

А вот чего не понимаю я, то почему не используется обратный слеш в операторе формат? По всем правилам оператор должен иметь такой вид
Код: vbnet
1.
2.
dt = Me.dataNachalaReisa
MsgBox DCount("kodReisa", "t_reisi", "[dataNachalaReisa]=#" & Format(dt, "mm\-dd\-yyyy") & "#")

или такой
Код: vbnet
1.
2.
dt = Me.dataNachalaReisa
MsgBox DCount("[kodReisa]", "[t_reisi]", "[dataNachalaReisa]=#" & Format(dt, "dd\/mm\/yyyy") & "#")
...
Рейтинг: 0 / 0
Вопрос по агрегатным функциям и датам
    #39958018
Фотография Joss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А у ТС локалки разные?
...
Рейтинг: 0 / 0
Вопрос по агрегатным функциям и датам
    #39958026
bubucha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
запрос с параметрами решает
...
Рейтинг: 0 / 0
Вопрос по агрегатным функциям и датам
    #39958027
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо всем!)

Да, возможно дело в локальных настройках отображения дат на самих машинах.

Спасибо за примеры и рекомендации. попробую все варианты ваши, на предмет универсальности.

Так то ,из всего вышесказанного - два пути к универсальному решению - либо экранировать правильно, как сказал Joss, либо приводить текст к дате через CDate - Akina.

Буду пробовать.
...
Рейтинг: 0 / 0
Вопрос по агрегатным функциям и датам
    #39958072
Сергей Лалов
=#" & Format(dt, "mm-dd-yyyy") & "#"
=#" & Format(dt, "dd/mm/yyyy") & "#"
Проверял несколько раз.
Почему то всегда приходится подкручивать , когда дело заходит об агрегатных функциях и условиях в них.
Лучше бы вы один раз прочитали ФАК этого форума на эту тему.
Не только в агрегатных функциях, но и в запросах, и в вычисляемых полях формат даты должен быть такой (американский):
#mm/dd/yyyy# (или #mm/dd/yy#)
Чтоб его получить, я предпочитаю так:
=" & Format(dt, "\#mm\/dd\/yyyy\#")

Akina=CDate('" & Format(dt, "yyyy-mm-dd")
Akina, ваш совет не лучший. Мало того, что выполняется преобразование Дата-Текст-Дата, но еще и текстовое представление даты отличантся от системного ДД.ММ.ГГГГ. Не исключены ошибки преобразования.
JossПо всем правилам оператор должен иметь такой вид
dt = Me.dataNachalaReisa
MsgBox DCount("kodReisa", "t_reisi", "[dataNachalaReisa]=#" & Format(dt, "mm\-dd\-yyyy") & "#")
или такой
dt = Me.dataNachalaReisa
MsgBox DCount("[kodReisa]", "[t_reisi]", "[dataNachalaReisa]=#" & Format(dt, "dd\/mm\/yyyy") & "#") Joss, где вы видели такие правила? 1-й вариант, возможно и прокатит, но тоже не надежный, а 2-й точно неправильный (dd и mm не там).
...
Рейтинг: 0 / 0
Вопрос по агрегатным функциям и датам
    #39958115
Swa111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сергей Лалов,
Тоже сталкивался с проблемой формата дат на разных машинах. Поэтому в запросы даты вставляются через функцию. т.е. к примеру как то так

Код: vbnet
1.
2.
3.
Public Function  d2s(dDate) As String
 d2s= "#" & Format(dDate, "mm\/dd\/yyyy hh:nn:ss") & "#"
End Function


и в простейшем случае используется так:
Код: vbnet
1.
sSQL = "... where dDate = " & d2s(date)



Если нужно поменять формат даты, меняю маску даты в одном месте. Можно вообще ее определять автоматически и хранить в переменной (но было лень)
...
Рейтинг: 0 / 0
Вопрос по агрегатным функциям и датам
    #39958117
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кривцов Анатолий
...Лучше бы вы один раз прочитали ФАК этого форума на эту тему....
И фсе будет работать...
ФАК: "Не пропустите символы # (он обрамляет всю константу типа дата-время) и \ (он предохраняет / и : от их замены в соответствии с региональными настройками, что имеет обыкновение делать функция Format и что мешает правильной работе команды SQL.)"
...
Рейтинг: 0 / 0
Вопрос по агрегатным функциям и датам
    #39958133
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Лалов, ну не умеешь ты правильно создавать критерий руками. пусть это делает сам Access - BuildCriteria
...
Рейтинг: 0 / 0
Вопрос по агрегатным функциям и датам
    #39958138
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Панург,
Ну вот начинается тут )) условие выборки критерия зависит от контекста переменных. Билдер не поможет при наличии в условии множества переменных с разными типами данных. В Vba.
...
Рейтинг: 0 / 0
Вопрос по агрегатным функциям и датам
    #39958167
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Swa111
Сергей Лалов,
Тоже сталкивался с проблемой формата дат на разных машинах. Поэтому в запросы даты вставляются через функцию. т.е. к примеру как то так

Код: vbnet
1.
2.
3.
Public Function  d2s(dDate) As String
 d2s= "#" & Format(dDate, "mm\/dd\/yyyy hh:nn:ss") & "#"
End Function


и в простейшем случае используется так:
Код: vbnet
1.
sSQL = "... where dDate = " & d2s(date)



Если нужно поменять формат даты, меняю маску даты в одном месте. Можно вообще ее определять автоматически и хранить в переменной (но было лень)


Спс, положу в копилку!)
...
Рейтинг: 0 / 0
Вопрос по агрегатным функциям и датам
    #39958169
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Лалов, это от чего же? делай по отдельности, для каждой. Проблем не вижу.
...
Рейтинг: 0 / 0
Вопрос по агрегатным функциям и датам
    #39958175
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кривцов Анатолий,

Вам тоже спасибо! Но тут смотрите ,вопрос не сколько поиск универсального метода ,а почему в одном случае работает (на компе1) и не работает (на компе2).
...
Рейтинг: 0 / 0
Вопрос по агрегатным функциям и датам
    #39958179
Фотография Сергей Лалов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Панург
Сергей Лалов, это от чего же? делай по отдельности, для каждой. Проблем не вижу.


Попробую, спс)
...
Рейтинг: 0 / 0
Вопрос по агрегатным функциям и датам
    #39958183
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: vbnet
1.
2.
3.
Me.RecordSource = "select*from tbl where nacalo=#" & Format(Me.Поле0, "mm/dd/yyyy") & "#"   'ошибка
Me.RecordSource = "select*from tbl where nacalo=#" & Format(Me.Поле0, "mm-dd-yyyy") & "#" 'работает на одном,ошибка на другом
Me.RecordSource = "select*from tbl where nacalo=#" & Format(Me.Поле0, "mm\/dd\/yyyy") & "#" 'работает на обоих,какой бы формат отображения даты не был задан
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Вопрос по агрегатным функциям и датам
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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