Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.03.2017, 12:51   #1
Loshara
Пользователь
 
Регистрация: 18.03.2015
Сообщений: 46
По умолчанию запрос в SQL 2016 из vba

Уважаемые программисты. при формировании запроса вида
Код:
Conn.Open "Provider=SQLOLEDB.1;Password=XXXXX;Persist Security Info=True;User ID= YYYYY;Initial Catalog= ZZZZZZ; Data Source=HAHAHA"
st0 = "SELECT DataOutPlant, NetWeight, ProductLoadPCS, TypeProductLoad, CementMark, PointLoadCar, CementMarkText FROM BASE_ASU_OC_MIH.dbo.TableLoadCar TableLoadCar where DataOutPlant > " & dt1 & "DataOutPlant < " & dt2 &" ORDER BY TableLoadCar.DataOutPlant"
Set oCmd = New ADODB.Command
Set oCmd.ActiveConnection = Conn
With oCmd
   .CommandText = st0
   .CommandType = adCmdText
   .Execute
End With
Set oRes = New ADODB.Recordset
Set oRes.ActiveConnection = Conn
oRes.Open oCmd
постоянно возникала ошибка неправильный формат данных в запросе.
Когда я разбирался то оказалось что формат данных DataOutPlant - datatime2 представлен в американском виде - YYYY-MM-DD HH:MM:SS.XXXXXXX а формат dt1 представлен в виде обычной даты.
Попытка использовать в запросе
Код:
convert(varchar,getdate(),104) +' '+ convert(varchar,getdate(),108)
для получения необходимой фильтрации не дало результатов.

Подскажите пожалуйста кто сталкивался с подобной проблемой в VBA способ решения данной проблемы.
P.S. перевод SQL в старый формат прошу не предлагать установлен Apache который с старым форматом не работает.
P.P.S. используется SQL сервер - 2016 Excel 2010 (переход на OFFICE 2016 не предлагать)
Loshara вне форума Ответить с цитированием
Старый 23.03.2017, 13:32   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

convert(varchar,getdate(),126) - ?
время не надо отдельно
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 23.03.2017, 13:40   #3
Loshara
Пользователь
 
Регистрация: 18.03.2015
Сообщений: 46
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
convert(varchar,getdate(),126) - ?
время не надо отдельно
Попробовал но по какой-то причине он дает ошибку не правильный формат запроса. Может быть нужно подключить какую-нибудь настройку - не понимаю.
А кроме того формат convert(varchar,getdate(),126) выдаст гггг-мм-ддТчч:мм:сс.ммм (без пробелов) (ISO8601)

Последний раз редактировалось Loshara; 23.03.2017 в 13:48.
Loshara вне форума Ответить с цитированием
Старый 23.03.2017, 14:14   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Цитата:
ISO8601
https://technet.microsoft.com/ru-ru/...ql.105%29.aspx

У меня все Ok. Собственно и так понимает dt < '20161125'
dt < '20161125 13:30:00' не пробовал, скорее всего не поймет
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 23.03.2017, 14:25   #5
Loshara
Пользователь
 
Регистрация: 18.03.2015
Сообщений: 46
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
https://technet.microsoft.com/ru-ru/...ql.105%29.aspx

У меня все Ok. Собственно и так понимает dt < '20161125'
dt < '20161125 13:30:00' не пробовал, скорее всего не поймет
у меня dt1 - 20170228 20:00:00 dt2 - 20170301 20:00:00 и он не понимает
Преобразовал в символьную используя CAST и все сработало.
Спасибо. Аватар.
Есть еще вопрос как мне добавить условие DataoutPlant <> Null. На запросе возникает отсутствие записей хотя их больше 300

Последний раз редактировалось Loshara; 23.03.2017 в 15:00.
Loshara вне форума Ответить с цитированием
Старый 23.03.2017, 15:20   #6
Loshara
Пользователь
 
Регистрация: 18.03.2015
Сообщений: 46
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
https://technet.microsoft.com/ru-ru/...ql.105%29.aspx

У меня все Ok. Собственно и так понимает dt < '20161125'
dt < '20161125 13:30:00' не пробовал, скорее всего не поймет
Все ок но можно ли сделать в теле запроса в WHERE not IsNull(DataOutPlant)
Loshara вне форума Ответить с цитированием
Старый 23.03.2017, 15:31   #7
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

DataoutPlant IS NOT Null
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 24.03.2017, 09:47   #8
Loshara
Пользователь
 
Регистрация: 18.03.2015
Сообщений: 46
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
https://technet.microsoft.com/ru-ru/...ql.105%29.aspx

У меня все Ok. Собственно и так понимает dt < '20161125'
dt < '20161125 13:30:00' не пробовал, скорее всего не поймет
Спасибо большое я разобрался в чем была проблема вместо
Код:
convert(varchar,getdate(),104) +' '+ convert(varchar,getdate(),108)
написал
Код:
convert(varchar,getdate(),104)" & "' '" & "convert(varchar,getdate(),108)
и все заработало похоже VBA коверкает выражение Select
Loshara вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Sql server 2016 Ernest027 БД в Delphi 1 12.03.2016 08:35
SQL запрос в VBA superpsih Microsoft Office Access 8 15.01.2016 12:59
VBA.SQL запрос при открытии формы katttes Microsoft Office Access 2 27.03.2013 14:12
Простой SQL запрос средствами vba RISagitov Microsoft Office Access 3 26.09.2012 20:11
sql запрос в vba Access DenProx Microsoft Office Access 7 21.01.2011 07:46