Форум программистов, компьютерный форум, киберфорум
Наши страницы
VBA
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
Kazimirskiy
1 / 1 / 0
Регистрация: 26.01.2016
Сообщений: 48
1

Запрос в Access за период

23.04.2018, 12:52. Просмотров 835. Ответов 10
Метки нет (Все метки)

Добрый день.

Подскажите как решить задачку. Необходима выгрузка данных в excel по датам.

По примеру ниже запрос выгружает записи по нужной ФИО, но по заданным датам в коде.
Visual Basic
1
sqlt="select*FROM Таблица1 WHERE [fio] like'*" & t * "*' And [data]>#19/04/2018# and [data]<#23/04/2018#"
Не получается задать переменные для дат. Т.е. пользователь сам должен выбирать нужный ему диапазон.

Заранее спасибо за помощь.
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.04.2018, 12:52
Ответы с готовыми решениями:

Access - внедрение переменной в запрос
необходимо в запросе перебрать много значений с фиксированным шагом. идея как...

Sql запрос из Excel в Access
Как сделать связь с базой данных через ADO ,чтобы результат какого-то запроса в...

Access запрос по нажатию кнопки
Здравствуйте! Очень нужна ваша помощь... Дана основная форма со списком...

Access 2007 запрос sql из VBA
Доброго дня. Начали делать базу. Столкнулся с задачей создания формы...

Оптимизировать запрос к книгам Excel из Access
Есть скрипт на VBA в Access надо бы ускорить. Скрипт в приложении. Добавлено...

10
nape63
124 / 58 / 12
Регистрация: 03.03.2015
Сообщений: 165
23.04.2018, 14:56 2
Выдернул из кода, надеюсь поймете ))
Visual Basic
1
2
3
4
strSQL = strSQL _
               & "(DateAdd(""yyyy""," & Forms.fBase.fldOldOn & ", [tAllBase].[BirthDay])<= Now()) " _
               & "And (DateAdd(""yyyy""," & Forms.fBase.fldOldTo & ", [tAllBase].[BirthDay])>= Now()) " _
               & " " & IIf(lngUseCtrl > 0, strAND, "")
Кусок, как формировать диапазон дат. Просто весь фильтр длинный. ))
0
Kazimirskiy
1 / 1 / 0
Регистрация: 26.01.2016
Сообщений: 48
23.04.2018, 15:02  [ТС] 3
Цитата Сообщение от nape63 Посмотреть сообщение
Visual Basic
1
(DateAdd(""yyyy"","
"
Я так понимаю это объявление формата даты?
0
nape63
124 / 58 / 12
Регистрация: 03.03.2015
Сообщений: 165
23.04.2018, 15:15 4
Да это по годам. В данном случае надо было отбирать по возрасту от и до.

Добавлено через 10 минут
Пытался другую использовать(DateDiff), стала проблема с преобразованием данных. Не смог с налету победить и сделал от обратного.
0
Kazimirskiy
1 / 1 / 0
Регистрация: 26.01.2016
Сообщений: 48
23.04.2018, 15:20  [ТС] 5
Цитата Сообщение от nape63 Посмотреть сообщение
Пытался другую использовать(DateDiff), стала проблема с преобразованием данных. Не смог с налету победить и сделал от обратного.

Пока не совсем понял. У меня две ячейки где пользователь указывает начальную и конечную дату выгрузки. При этом формат наш. Я так понимаю что нужно изменить формат. При этом не пойму где в запросе отобразить эти переменные.

Я это вижу так:
Visual Basic
1
sqlt="select*FROM Таблица1 WHERE [fio] like'*" & t * "*' And [data]>" & d1 & " and [data]<" & d2 & ""
Но выдает ошибку.
0
nape63
124 / 58 / 12
Регистрация: 03.03.2015
Сообщений: 165
23.04.2018, 15:56 6
Visual Basic
1
2
3
strSQL ="SELECT tAllBase.*, tAllBase.DateCreateRec, tAllBase.DateCreateRec, tAllBase.DateCreateRec
FROM tAllBase
WHERE (((tAllBase.DateCreateRec)>=" & [Формы]![Form1]![Поле1] & ") AND ((tAllBase.DateCreateRec)<=" & [Формы]![Form1]![Поле3] & "));"
Примерно так. Ну и наверное переменные надо "as Date". Может надо будет Format(...) применить

Добавлено через 14 минут
Надеюсь, поможет. Вместо [Формы]![Form1]![Поле1] - переменные. Все, меня выгнали из-за компа. Пошел обед готовить мелким )))
0
Kazimirskiy
1 / 1 / 0
Регистрация: 26.01.2016
Сообщений: 48
23.04.2018, 17:15  [ТС] 7
Выдает ошибку 3027


Но вот мой пример заработал, после того как поменял формат вводимых дат. Но заработал коряво. Выгружает все записи.
0
Казанский
14355 / 5961 / 1583
Регистрация: 24.09.2011
Сообщений: 9,387
23.04.2018, 18:48 8
Лучший ответ Сообщение было отмечено Kazimirskiy как решение

Решение

Kazimirskiy, даты наверно надо в "родном" формате ММ/ДД/ГГГГ. Те, что в примере - 19/04/2018, 23/04/2018 - интерпретируются однозначно, но например 10/04/2018 наверно будет воспринята как 4 октября.
Если возвратиться к #1
Visual Basic
1
2
3
4
5
Dim sqlt$, d1 As Date, d2 As Date
  d1 = InputBox("Дата больше", , Date - 4) 'например
  d2 = InputBox("Дата меньше", , Date)
  sqlt = "select * FROM Таблица1 WHERE [fio] like '*" & t & "*' And [data]>#" _
    & Format$(d1, "MM\/DD\/YYYY") & "# and [data]<#" & Format$(d1, "MM\/DD\/YYYY\#")
1
nape63
124 / 58 / 12
Регистрация: 03.03.2015
Сообщений: 165
23.04.2018, 21:22 9
Цитата Сообщение от Kazimirskiy Посмотреть сообщение
WHERE [fio] like'*"
Кстати Like * кривовато работает. Осторожнее, не все ФИО ищет.
Недавно меня это очень удивило. Прикол с кириллицей. Пока руки не дошли разобраться как с этим бороться.
1
Kazimirskiy
1 / 1 / 0
Регистрация: 26.01.2016
Сообщений: 48
24.04.2018, 09:19  [ТС] 10
Цитата Сообщение от nape63 Посмотреть сообщение
Сообщение от Kazimirskiy
WHERE [fio] like'*"
Кстати Like * кривовато работает. Осторожнее, не все ФИО ищет.
Недавно меня это очень удивило. Прикол с кириллицей. Пока руки не дошли разобраться как с этим бороться.
Вроде косяков пока не наблюдал.
Можно подробнее?

Добавлено через 5 минут
Цитата Сообщение от Казанский Посмотреть сообщение
Kazimirskiy, даты наверно надо в "родном" формате ММ/ДД/ГГГГ. Те, что в примере - 19/04/2018, 23/04/2018 - интерпретируются однозначно, но например 10/04/2018 наверно будет воспринята как 4 октября.
Если возвратиться к #1
Visual BasicВыделить код
Visual Basic
1
2
3
4
5
Dim sqlt$, d1 As Date, d2 As Date
* d1 = InputBox("Дата больше", , Date - 4) 'например
 *d2 = InputBox("Дата меньше", , Date)
* sqlt = "select * FROM Таблица1 WHERE [fio] like '*" & t & "*' And [data]>#" _
* * & Format$(d1, "MM\/DD\/YYYY") & "# and [data]<#" & Format$(d1, "MM\/DD\/YYYY\#")

Работает. Спасибо и + в карму.
По сути мой пример тоже должен работать, но я ничего не сделал с форматами дат и от сюда косяк.

Добавлено через 1 минуту
Цитата Сообщение от Kazimirskiy Посмотреть сообщение
nape63
И Вам спасибо за помощь.
Но буду ждать от Вас уточнений на счет оператора like
0
nape63
124 / 58 / 12
Регистрация: 03.03.2015
Сообщений: 165
24.04.2018, 11:36 11
Недавно делал импорт из Exel и надо было искать повторы в ФИО. Перебирал варианты, как лучше. Один из вариантов использовать Like *. Так он, гад, одни ФИО отбирает по кускам, а другие нет. Начал использовать разные куски ФИО, чтоб понять, с какими символами не ищет. Искал на разных форумах, на одном упомянули что-то про SQL с кириллицей.
Ладно, заметил, а то если бы "пульнул" автоматом - получил бы результат. )) Поборол всякими Trim и InStr. Немного дольше, зато надежнее. Тем более операция разовая. Конечно, если будет вывод на экран, можно заметить, если знаешь конечный результат поиска. Причем, на одном из форумов говорилось, что с английским проблем нет.

Добавлено через 49 минут
Ну и раз такая пьянка, еще одно :
Visual Basic
1
(DateAdd(""yyyy""," & Forms.fBase.fldOldOn & ", [tAllBase].[BirthDay])<= Now())
это работает, так как Forms.fBase.fldOldOn - число лет
А вот это :
Visual Basic
1
(DateDiff(""yyyy"", [tAllBase].[BirthDay], Now())>=" & Forms.fBase.fldOldOn & ")"
Такой запрос на экране показывает как надо, а в конструкции :
Visual Basic
1
 Set rcdTmpExel = dbMy.OpenRecordset(strSQLExel, dbOpenDynaset)
пишет, что не хватает параметра.
Понимаю, что проблема в преобразовании данных, но даже когда приводил Forms.fBase.fldOldOn к дате, и к инту , и форматировал и "боком ставил". Потом надоело, и сделал как в посте #2.
0
24.04.2018, 11:36
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.04.2018, 11:36

POST запрос к web серверу из Access
Здравствуйте уважаемые форумчане ! Начальник задал сложную для меня задачу и...

SQL запрос с параметром в Access, используя VBA
Здравствуйте, есть БД в Access. В ней таблица (каталог предложений) и форма...

Как программно создать запрос в VBA Access?
Помогите пожалуйста. Мне нужно программно создать запрос, и открыть его как...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru