Форум программистов, компьютерный форум, киберфорум
Наши страницы

VBA

Войти
Регистрация
Восстановить пароль
 
Kazimirskiy
1 / 1 / 0
Регистрация: 26.01.2016
Сообщений: 39
#1

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

23.04.2018, 12:52. Просмотров 195. Ответов 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 за период (VBA):

Access запрос по нажатию кнопки - VBA
Здравствуйте! Очень нужна ваша помощь... Дана основная форма со списком (например поле &quot;разряд&quot;) и кнопкой, по нажатию на которой...

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

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

POST запрос к web серверу из Access - VBA
Здравствуйте уважаемые форумчане ! Начальник задал сложную для меня задачу и поэтому прошу помощи у вас! Суть задачи такова. Есть База на...

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

Оптимизировать запрос к книгам Excel из Access - VBA
Есть скрипт на VBA в Access надо бы ускорить. Скрипт в приложении. Добавлено через 3 минуты Private Sub Кнопка0_Click() Dim Papka,...

10
nape63
93 / 44 / 10
Регистрация: 03.03.2015
Сообщений: 105
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
Сообщений: 39
23.04.2018, 15:02  [ТС] #3
Цитата Сообщение от nape63 Посмотреть сообщение
Visual Basic
1
(DateAdd(""yyyy"","
"
Я так понимаю это объявление формата даты?
0
nape63
93 / 44 / 10
Регистрация: 03.03.2015
Сообщений: 105
23.04.2018, 15:15 #4
Да это по годам. В данном случае надо было отбирать по возрасту от и до.

Добавлено через 10 минут
Пытался другую использовать(DateDiff), стала проблема с преобразованием данных. Не смог с налету победить и сделал от обратного.
0
Kazimirskiy
1 / 1 / 0
Регистрация: 26.01.2016
Сообщений: 39
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
93 / 44 / 10
Регистрация: 03.03.2015
Сообщений: 105
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
Сообщений: 39
23.04.2018, 17:15  [ТС] #7
Выдает ошибку 3027


Но вот мой пример заработал, после того как поменял формат вводимых дат. Но заработал коряво. Выгружает все записи.
0
Казанский
13832 / 5595 / 1418
Регистрация: 24.09.2011
Сообщений: 8,782
23.04.2018, 18:48 #8
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
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
93 / 44 / 10
Регистрация: 03.03.2015
Сообщений: 105
23.04.2018, 21:22 #9
Цитата Сообщение от Kazimirskiy Посмотреть сообщение
WHERE [fio] like'*"
Кстати Like * кривовато работает. Осторожнее, не все ФИО ищет.
Недавно меня это очень удивило. Прикол с кириллицей. Пока руки не дошли разобраться как с этим бороться.
1
Kazimirskiy
1 / 1 / 0
Регистрация: 26.01.2016
Сообщений: 39
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
93 / 44 / 10
Регистрация: 03.03.2015
Сообщений: 105
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
Привет! Вот еще темы с ответами:

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

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

Запрос с параметрами в ACCESS через VBA не записывает данные в таблицу - VBA
Приветствую! Наверное, я как-то неправильно использую технологию запуска запроса из VBA Сам запрос на обновление записей, если его...

SQL запрос на добавление данных из VBA Excel в таблицу Access - VBA
Добрый день, форумчане! Столкнулся с ошибкой запроса на добавление при попытке передать данные из формы в Excel в таблицы Access. Ошибка -...


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

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

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