Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1 2 След.
RSS
Ошибка при сравнение дат в запросе, В запросе, в блоке WHERE не сравниваются даты
 
Приветствую уважаемых форумчан!
Не могу в WHERE сравнить даты в запросе, выдает сообщение  " Число содержит синтаксическую ошибку в выражении запроса 'Cdate(BegProekt>01.01.201)' ".
Проверил содержание переменной DateBeg - все верно, тип Date, содержит значение 01.01.2018.
Однако в сообщение дата обозвана числом и почему то обрезана справа до 01.01.201 - выглядит подозрительно.
И почему ошибка именно синтаксическая - непонятно...
Перебрал варианты которые знал - не помогло...
Помогите разобраться, не могу понять где ошибся в строке:
Код
rs.Open "SELECT * FROM Itog WHERE CDate(BegProekt) >" & DateBeg & " ORDER BY 1", cn, adOpenDynamic, adLockBatchOptimistic

Сам текст, вроде ничего подозрительного
Код
Private Sub TextBox1_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)

Dim DateBeg As String

DateBeg = UserForm.TextBox1
MsgBox TypeName(DateBeg)
MsgBox DateBeg

cn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source=" & Worksheets("Config").Cells(3, 2) & "Project.mdb; Jet OLEDB:Database;"
cn.Open ConnectionString

DateBeg = CDate(UserForm.TextBox1)
MsgBox TypeName(DateBeg)
MsgBox DateBeg

rs.Open "SELECT * FROM Itog WHERE CDate(BegProekt) >" & DateBeg & ", cn, adOpenDynamic, adLockBatchOptimistic
 'rs.Open "SELECT * FROM Itog WHERE BegProekt >" & CDate(UserForm.TextBox1) & ", cn, adOpenDynamic, adLockBatchOptimistic'

End Sub
Изменено: Alexban65 - 11 Сен 2018 15:26:14
Великий и могучий утес, сверкающий бой, с ногой на небе, живущий, пока не исчезнут машины.
 
Код
"SELECT * FROM " & Itog & " WHERE " & CDate(BegProekt) & " >" & DateBeg ...
Itog и BegProekt - это переменные? а Вы их вовнутрь кавычек суете
Изменено: _Boroda_ - 11 Сен 2018 15:31:57
Скажи мне, кудесник, любимец ба’гов...

 
Itog - это таблица.
BegProekt - это поле из Itog
Без дат эта строка работает.
Великий и могучий утес, сверкающий бой, с ногой на небе, живущий, пока не исчезнут машины.
 
Itog - допустим
А вот как Вы берете CDate внутри текста - вот это мне непонятно
Скажи мне, кудесник, любимец ба’гов...

 
_Boroda_, Александр CDate(BegProekt) это SQL операция.
Alexban65, а вы уверены, что она нужна?
Изменено: БМВ - 11 Сен 2018 16:02:20
 
Цитата
БМВ написал:
_Boroda_ , а вы уверены, что она нужна?
Нет, конечно не уверен. Тем более, что в тексте
Цитата
Alexban65 написал:
'Cdate(BegProekt>01.01.201)'
не только год порезан, но и скобка не на месте

И вообще - почему ко мне вопрос-то?
Изменено: _Boroda_ - 11 Сен 2018 15:57:55
Скажи мне, кудесник, любимец ба’гов...

 
Я пробовал различные варианты- и без CDate внутри проблемной строки.
Код
rs.Open "SELECT * FROM Itog WHERE BegProekt >" & DateBeg & " ORDER BY 1", cn, adOpenDynamic, adLockBatchOptimistic
Переменная собиралась вот так: DateBeg = CDate(UserForm.TextBox1)

Ошибка и так выдавала: 'BegProekt>01.01.201)'
Изменено: Alexban65 - 11 Сен 2018 16:02:28
Великий и могучий утес, сверкающий бой, с ногой на небе, живущий, пока не исчезнут машины.
 
Alexban65, а не пробовали DateBeg  без Cdate? Или вовнутрь решеток его? И в английский формат даты?
Скажи мне, кудесник, любимец ба’гов...

 
_Boroda_, Александр, прошу прощения, не то имя вставил в сообщении выше, не вам адресовал вопрос. Исправил.
 
DateBeg - это текстовое значение из текстбокса. CDate делает его датой, поскольку его с датой и надо сравнивать.
Про решетки - где их ставить, попробую.
Формат даты пробовал разный  - с точками и с слешем.
Возможно собака порылась где то в этом районе...))

PS. Можно сделать резуме что с правой частью вроде нормально - надо разбираться с левой, где дата обрезана

Сделал так DateBeg = "01/09/2018"
Ошибки нет, но и реакции никакой - рекордсет видимо пустой
Изменено: Alexban65 - 11 Сен 2018 16:15:20
Великий и могучий утес, сверкающий бой, с ногой на небе, живущий, пока не исчезнут машины.
 
Цитата
Alexban65 написал:
DateBeg - это текстовое значение из текстбокса. CDate делает его датой, поскольку его с датой и надо сравнивать
Ну, про это нам рассказывать, думаю, не стОит, поверьте, мы в курсе  :D
Цитата
Alexban65 написал:
Про решетки - где их ставить, попробую.
вот здесь: #01.09.2018# или #09.01.2018#
Цитата
Alexban65 написал:
Сделал так DateBeg = "01/09/2018"
попробуйте
Цитата
_Boroda_ написал:
в английский формат даты?

"09.01.2018"
Скажи мне, кудесник, любимец ба’гов...

 
Перебрал вариант, с вариантами...)))
Код
DateBeg = "#09/01/2018#" 'CDate(UserForm.TextBox1)
DateBeg = CDate(DateBeg)
Выдало "Несоотвествие типов данных"(ожидаемо...)

И такой, английсикй вариант, не помог
Код
DateBeg = "09.01.2018" 'CDate(UserForm.TextBox1)
DateBeg = CDate(DateBeg)
MsgBox TypeName(DateBeg)
Изменено: Alexban65 - 11 Сен 2018 16:30:19
Великий и могучий утес, сверкающий бой, с ногой на небе, живущий, пока не исчезнут машины.
 
Alexban65, что за данные в источнике? От этого отталкивайтесь
 
Источник  в первую очередь проверил. Это поле  - дата и время, то есть тип данных дата.
Хотя меня время смущает - может быть маленькое несоответствие.
Может на пути из Акцесса в Ексель что то на лету происходит?

В запросе взял два поля с типом дата  из источника - все нормально, между собой в запросе работают.
Изменено: Alexban65 - 11 Сен 2018 16:39:39
Великий и могучий утес, сверкающий бой, с ногой на небе, живущий, пока не исчезнут машины.
 
WHERE BegProekt >" & СDate(DateBeg)  пробовали?
 
Да, в этой части CDate ставил - и справа и слева, и одновременно.
И даже CDate(UserForm.TextBox1)....
Стоп.
С одним амперсендом???????
Ругается, если так
Код
rs.Open "SELECT * FROM Itog WHERE BegProekt<" & CDate(DateBeg) 
Изменено: Alexban65 - 11 Сен 2018 16:52:31
Великий и могучий утес, сверкающий бой, с ногой на небе, живущий, пока не исчезнут машины.
 
Вы б проверили что у вас в результате за строка выходит дебагером.
а также RS - это у вас что за объект? От куда он сразу с .OPEN берется?
Изменено: БМВ - 11 Сен 2018 16:53:47
 
Так у меня дебагер на эту проблемную строку и показывает.
А как посмотреть дебагером, что с этой строкой не такк - опыта еще нет.
Да и сомневаюсь что дебагер будет разбирать строку.
Но будем пробовать...
Великий и могучий утес, сверкающий бой, с ногой на небе, живущий, пока не исчезнут машины.
 
Alexban65, ну если не знаете как посмотреть что даст ваша текстовая конструкция
"SELECT * FROM Itog WHERE CDate(BegProekt) >" & DateBeg & " ORDER BY 1"
то
Код
debug.print "SELECT * FROM Itog WHERE BegProekt >" & Cdate(DateBeg) & " ORDER BY 1"
Изменено: БМВ - 11 Сен 2018 17:03:57
 
Конструкция не работает, rs.Open мешает(это рекордсет).
Код
Debug.Print rs.Open "SELECT * FROM Itog WHERE BegProekt >" & CDate(DateBeg) & "", cn, adOpenDynamic, adLockBatchOptimistic
Изменено: Alexban65 - 11 Сен 2018 17:21:25
Великий и могучий утес, сверкающий бой, с ногой на небе, живущий, пока не исчезнут машины.
 
Пошел читать литературу - может наведет на умные мысли...))
Великий и могучий утес, сверкающий бой, с ногой на небе, живущий, пока не исчезнут машины.
 
Alexban65,  то что это рекордсэт я понимаю, просто на маленьком экране не увидел параметров сперва и СN пропустил,
но вот указывать его в дебаге не писал.
 
Alexban65, вам сначало нужно понять, в каком формате как данные дат хранятся в БД (Напр.2018-08-01 или 01/08/2018 или 01.08.18)
потом нужно написать свою функцию которая дату будет преврящать в строку в нужном формате
например
Код
with vba
   DateBeg$=.day(.now) & "/" & .month(.now) & "/" & .year(.now)
end with



а в запросе не забудьте скобки одинарные.
Код
"SELECT * FROM Itog WHERE BegProekt >'" & Cdate(DateBeg) & "' ORDER BY 1"
 и все у вас получиться.
Изменено: ivanok_v2 - 11 Сен 2018 17:47:44
 
ivanok_v2,
Цитата
Alexban65 написал:
Это поле  - дата и время, то есть тип данных дата.
допускаю, что это может быть и текст, но ТС пишет что дата
Почему не просто Format(Date, "YYYY-MM-DD HH:MM:SS") или подобное?
про одинарные "скобки" да, могут потребоваться, только это не скобки.
 
Цитата
БМВ написал:
только это не скобки.
главное что б поняли причину.
В таких случаях лучше писать запрос в аксесе, а потом запрос собирать по аналогии в вба
Изменено: ivanok_v2 - 11 Сен 2018 18:16:47
 
Попробовал так:
Код
rs.Open "SELECT * FROM Itog WHERE BegProekt >" & DateBeg & " AND BegProekt is not null ", cn, adOpenDynamic, adLockBatchOptimistic
сообщение  " Число содержит синтаксическую ошибку в выражении запроса 'Cdate(BegProekt>01.01.2018 AND BegProekt IS NOT NUL )' ".
Опять откусил справа символ от NULL...
Ох, неспроста это...
Чудес не бывает, ошибка скорее всего перед глазами,  на виду...)))
Сходил в источник(ACCESS), открыл таблицу, поглядел формат - дата стоит в формате 25.09.2018, то есть штатно.
Функция возвращает значение, сначала попробую подставить константу типа "01.08.2018"...
Поставил
Код
& CDate("01.08.2018") & 
 - ругается, а  как оформить правильно константу я не знаю пока...((
Хотя, если я правильно понимаю, одинарные кавычки это признак строковой переменной.
Составил запрос в акцесе, выбрал все поля с типом дата, попробую собрать его в екселе, будем смотреть, пробовать...
Изменено: Alexban65 - 11 Сен 2018 18:43:32
Великий и могучий утес, сверкающий бой, с ногой на небе, живущий, пока не исчезнут машины.
 
Доброе время суток
Цитата
Alexban65 написал:
открыл таблицу, поглядел формат - дата стоит в формате 25.09.2018, то есть штатно.
Ваш SQL запрос - это текстовая строка. Дата в этой строке, как константа, должна быть в соответствующем формате, а не так как вам показывают в таблице (это зависит от региональных настроек).
 
Цитата
Андрей VG написал:
Доброе время сутокЦитата Alexban65  написал:открыл таблицу, поглядел формат - дата стоит в формате 25.09.2018, то есть штатно.Ваш SQL запрос - это текстовая строка. Дата в этой строке, как константа,  должна быть в соответствующем формате , а не так как вам показывают в таблице (это зависит от региональных настроек).
Спасибо, ценная инфа для понимания
Великий и могучий утес, сверкающий бой, с ногой на небе, живущий, пока не исчезнут машины.
 
Цитата
Alexban65 написал:
написал:открыл таблицу, поглядел формат - дата стоит в формате 25.09.2018
Переключите локаль на штатовский английский будет 09/25/2018 - и что, в чём доказательство? Правильный формат даты в запросе.
Код
"#" & Format$(Date, "mm\/dd\/yyyy") & "#"
Изменено: Андрей VG - 11 Сен 2018 18:58:31 (А вот откуда лишняя открывающая скобка?)
 
Андрей VG,
Цитата
Андрей VG написал:
Переключите локаль на штатовский английский будет 09/25/2018 - и что, в чём доказательство? Правильный формат даты в запросе.
Код
"#" & Format$(Date, "mm\/dd\/yyyy") & "#"
Такая конструкция в WHERE, в моем запросе, привела DateBeg к виду #08/01/2018#,  отрабатывает без ошибок, recordcet создается и кладется на лист.
Самостоятельно, новичку, такое отработать очень даже проблематично, если не сказать больше...
Вот такой получился работоспособный вид:
Код
DateBeg=CDate(UserForm.TextBox1)
DateBeg = "#" & Format$(DateBeg, "mm\/dd\/yyyy") & "#"
'MsgBox TypeName(DateBeg)'
'MsgBox DateBeg'
rs.Open "SELECT * FROM Itog WHERE BegProekt >" & DateBeg & "  ", cn, adOpenDynamic, adLockBatchOptimistic

Премного благодарен всем за участие и внимание.
И особенно - за терпение...;-)
Всех вам благ, друзья...))
Изменено: Alexban65 - 11 Сен 2018 22:31:19
Великий и могучий утес, сверкающий бой, с ногой на небе, живущий, пока не исчезнут машины.
Страницы: 1 2 След.
Читают тему (гостей: 1)
Наверх