stud2008
Junior Member / Новичок
Участник № / Member № 4502
отправлено / posted
Подскажите как можно передать дату с экрана в 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 |
отправлено / posted
TRACE MODE не накладывает никаких ограничений на синтаксис запросов и не управляет БД. Если подобное сообщение появляется, скорее всего действительно некорректный синтаксис SQL запроса. Запустите Трассировщик Администратора ODBC Windows, в полученных логах посмотрите на что конкретно ругается БД. Возможно формат метки времени не соответствует или тип разделителя и т.п.
Сообщения / Posts 17345 | Из / From: Россия
| IP / IP: IP адрес / IP address |
stud2008
Junior Member / Новичок
Участник № / Member № 4502
отправлено / posted
Если вставляю в запрос текстовую переменную вида '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 |
stud2008
Junior Member / Новичок
Участник № / Member № 4502
отправлено / posted
При помещении аргумента даты в одинарные кавычки в рантайме работает. При тестировании в среде разработки не работает. Вопрос закрыт. Трассировщик помог, в нем можно посмотреть строку запроса которая отправляется на 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 |
отправлено / posted
Предварительно согласуйте типы данный в шаблоне связи с СУБД и в таблице БД. Они должны быть соответствовать друг другу (а то то текстовая переменная, то временная).
Так же стоит учесть региональные настройки времени-даты. Эту задачу можно решить с помощью функции преобразования типов WHERE base.time > CDATE('#DateFrom#')Сообщения / Posts 17345 | Из / From: Россия
| IP / IP: IP адрес / IP address |
stud2008
Junior Member / Новичок
Участник № / Member № 4502
отправлено / posted
Создаю меню для запроса к базе данных столкнулся с несколькими вопросами. Для изменения даты в запросе создал переменную тип DATE_AND_TIME, а она инициализируется текущим временем, можно ли это отключить? Для изменения даты использую ГО Дата и время, а он вносит сдвиг по часовому поясу даже если я по Гринвичу устанавливаю. Вообще мне нужно выбирать только дату со сдвигом на контрактный час. Например контрактный час 12:00 выбираешь число 18.08.2022, а дата передается в запросе 17.08.2022 12:00. Как это можно реализовать?
Сообщения / Posts 9 | Из / From: Россия
| IP / IP: IP адрес / IP address |
stud2008
Junior Member / Новичок
Участник № / Member № 4502
отправлено / posted
Собрал дату для запроса из атрибутов канала год, месяц, день привязанных к аргументам запроса в UINT. Получилась строка WHERE time >= '#year#-#mounth#-#day# 00:00:00'
Сообщения / Posts 9 | Из / From: Россия
| IP / IP: IP адрес / IP address |
отправлено / posted
Аргумент Date_and_Time самостоятельно не принимает значение текущего времени, скорее всего Вы создали и привязали к аргументу канала класса Time. Вы можете его удалить. Достаточно аргумент Date_and_Time экрана привязать к аргументу Date_and_Time канала Call.SQLQuery.
ГЭ Дата и Время самостоятельно не вносит сдвиг. Используется то время, которое Вы ввели. Оно может отображаться со сдвигом по часовому поясу или нет. Для этого в настройках ГЭ Дата и Время задайте "Отображать как - региональное время"
Что бы задавать только дату, у ГЭ Дата и Время установите "Показывать = дата". Что бы при этом была конкретная дата, то Вы правильно указали о применении атрибутов год-месяц-день.
Сообщения / Posts 17345 | Из / From: Россия
| IP / IP: IP адрес / IP address |