Форум TRACE MODE: техническая поддержка Послать новую тему / Post New Topic  Послать ответ / Post A Reply
мой профиль / my profile авторизация / login | регистрация / register | поиск / search | часто задаваемые вопросы / faq | начало / forum home

  Следующая старая тема / next oldest topic   Следующая новая тема / next newest topic
» Форум TRACE MODE: техническая поддержка » ТЕХНИЧЕСКАЯ ПОДДЕРЖКА / TECHNICAL SUPPORT TRACE MODE 6 » TRACE MODE 6 бесплатная Базовая версия / TRACE MODE 6 free Base version » DATE_AND_TIME в SQL запросе

   
Автор / Author Тема / Topic: DATE_AND_TIME в SQL запросе
stud2008
Junior Member / Новичок
Участник № / Member № 4502


Icon 1 отправлено / posted      Профиль для / Profile for stud2008           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Подскажите как можно передать дату с экрана в SQL запрос? Со значением аргумента по умолчанию данные не выводятся.

В шаблоне подключения к базе данных формирую запрос
//
SELECT TOP 24
base.time #DT#,
base.P #P#,
base.T #T#
FROM
base
WHERE base.time > #DateFrom#
//
Аргументы
Имя Тип Тип данных Значение по умолчанию
DateFrom In DATE_AND_TIME dt#2015-11-11-16:30:00.000
P Out REAL
T Out REAL
//
При вызове через "ГЭ База данных" пишет ошибку Incorrect syntax. Если удалить условие WHERE то данные выводятся.

Сообщения / Posts 9 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
АдАстра. Техподдержка
Administrator
Участник № / Member № 4


Icon 1 отправлено / posted      Профиль для / Profile for АдАстра. Техподдержка           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
TRACE MODE не накладывает никаких ограничений на синтаксис запросов и не управляет БД. Если подобное сообщение появляется, скорее всего действительно некорректный синтаксис SQL запроса. Запустите Трассировщик Администратора ODBC Windows, в полученных логах посмотрите на что конкретно ругается БД. Возможно формат метки времени не соответствует или тип разделителя и т.п.
Сообщения / Posts 17108 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
stud2008
Junior Member / Новичок
Участник № / Member № 4502


Icon 1 отправлено / posted      Профиль для / Profile for stud2008           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Если вставляю в запрос текстовую переменную вида '2015-10-11 16:30:00.000', то запрос выполняется.
Если использую переменную типа DATE_AND_TIME и инициализирую значением dt#2015-10-11-16:30:00.000, то в запрос передается такое же значение параметра dt#2015-10-11-16:30:00.000, пишет ошибку [SQL Server]Incorrect syntax near ':'. (102).
Как привести переменную DATE_AND_TIME к виду '2015-10-11 16:30:00.000'?

Сообщения / Posts 9 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
stud2008
Junior Member / Новичок
Участник № / Member № 4502


Icon 1 отправлено / posted      Профиль для / Profile for stud2008           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
При помещении аргумента даты в одинарные кавычки в рантайме работает. При тестировании в среде разработки не работает. Вопрос закрыт.
Трассировщик помог, в нем можно посмотреть строку запроса которая отправляется на SQL сервер.

SELECT TOP 24
base.time #DT#,
base.P #P#,
base.T #T#
FROM
base
WHERE base.time > '#DateFrom#'

Сообщения / Posts 9 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
АдАстра. Техподдержка
Administrator
Участник № / Member № 4


Icon 1 отправлено / posted      Профиль для / Profile for АдАстра. Техподдержка           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Предварительно согласуйте типы данный в шаблоне связи с СУБД и в таблице БД. Они должны быть соответствовать друг другу (а то то текстовая переменная, то временная).

Так же стоит учесть региональные настройки времени-даты.
Эту задачу можно решить с помощью функции преобразования типов
WHERE base.time > CDATE('#DateFrom#')

Сообщения / Posts 17108 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
stud2008
Junior Member / Новичок
Участник № / Member № 4502


Icon 1 отправлено / posted      Профиль для / Profile for stud2008           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Создаю меню для запроса к базе данных столкнулся с несколькими вопросами.
Для изменения даты в запросе создал переменную тип DATE_AND_TIME, а она инициализируется текущим временем, можно ли это отключить?
Для изменения даты использую ГО Дата и время, а он вносит сдвиг по часовому поясу даже если я по Гринвичу устанавливаю.
Вообще мне нужно выбирать только дату со сдвигом на контрактный час. Например контрактный час 12:00 выбираешь число 18.08.2022, а дата передается в запросе 17.08.2022 12:00. Как это можно реализовать?

Сообщения / Posts 9 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
stud2008
Junior Member / Новичок
Участник № / Member № 4502


Icon 1 отправлено / posted      Профиль для / Profile for stud2008           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Собрал дату для запроса из атрибутов канала год, месяц, день привязанных к аргументам запроса в UINT. Получилась строка WHERE time >= '#year#-#mounth#-#day# 00:00:00'
Сообщения / Posts 9 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
АдАстра. Техподдержка
Administrator
Участник № / Member № 4


Icon 1 отправлено / posted      Профиль для / Profile for АдАстра. Техподдержка           Редактировать/удалить сообщение / Edit/Delete Post   Вставить в ответ текст исходного сообщения  / Reply With Quote 
Аргумент Date_and_Time самостоятельно не принимает значение текущего времени, скорее всего Вы создали и привязали к аргументу канала класса Time. Вы можете его удалить. Достаточно аргумент Date_and_Time экрана привязать к аргументу Date_and_Time канала Call.SQLQuery.

ГЭ Дата и Время самостоятельно не вносит сдвиг. Используется то время, которое Вы ввели. Оно может отображаться со сдвигом по часовому поясу или нет. Для этого в настройках ГЭ Дата и Время задайте "Отображать как - региональное время"

Что бы задавать только дату, у ГЭ Дата и Время установите "Показывать = дата". Что бы при этом была конкретная дата, то Вы правильно указали о применении атрибутов год-месяц-день.

Сообщения / Posts 17108 | Из / From: Россия  |  IP / IP: IP адрес / IP address | Report this post to a Moderator
   

Quick Reply
Сообщение / Message:

HTML код не разрешен. / HTML is not enabled.
UBB код разрешен. / UBB Code is enabled.

Значки Graemlins / Instant Graemlins
   


Послать новую тему / Post New Topic  Послать ответ / Post A Reply Закрыть тему / Close Topic   Feature Topic   Переместить топик / Move Topic   Удалить топик / Delete Topic Следующая старая тема / next oldest topic   Следующая новая тема / next newest topic
 - Printer-friendly view of this topic
Перейти к / Hop To


Новости АСУ ТП / News | SCADA / HMI | Обучение / Trainings | Свяжитесь с нами / Contact Us



Powered by Infopop Corporation
UBB.classic™ 6.7.2