#crystal-reports #crystal-reports-xi
#crystal-отчеты #crystal-reports-xi
Вопрос:
У меня есть SQL-оператор data, который сравнивает даты, используя some_date_to_compare > date('2011-05-05')
синтаксис. В настоящее время дата жестко задана в инструкции SQL, и я хотел бы изменить ее, чтобы передать дату в качестве параметра, вот так: some_date_to_compare > date({?date_from})
. date_from
Это тип даты, а не Дата / час.
Проблема, однако, в том, что при попытке запустить отчет Crystal передает дату из поля входных параметров в следующем формате YYYY-MM-DD hh:mm:ss
, так что, например, если я выбираю 2011-05-05
в качестве даты из календаря, я получаю 2011-05-05 00:00:00
переданный date_from
параметр.
Есть ли какой-либо способ найти обходной путь или передать дату в формате, который я ожидаю ( YYYY-MM-DD
)?
РЕДАКТИРОВАТЬ (некоторая дополнительная информация):
Я использую Informix, и столбец имеет тип DATE (не DATETIME — дата time), так что это только дата. Теперь часть моего sql выглядит следующим образом: date_to_compare between date({?date_from}) AND date({?date_to})
, поэтому я пытаюсь сравнить значение из столбца в моей таблице с диапазоном дат.
Проблема, однако, заключается в том, что когда Crystal передает дату из поля входных параметров в качестве YYYY-MM-DD hh:mm:ss
результата проверки запроса: Ошибка преобразования строки в дату: -1218, и это из-за временной части в переданной дате.
Кстати, есть ли какая-либо возможность отключить проверку запроса с помощью Crystal в окне изменения команды SQL?
Ответ №1:
Для этого можно использовать ToText()
функцию.
ToText({datefield}, "yyyy-MM-dd")
Комментарии:
1. Но мой SQL находится в окне «Команда редактирования» в Database Expert. Я думаю, что этот SQL-это то, что Crystal отправляет непосредственно в базу данных (сразу после замены любых параметров). Похоже, Crystal не разрешает там свои собственные функции, следовательно, ошибка: Не удается разрешить процедуру (totext): -674
2. @cujo: Ах, не могли бы вы вместо этого ввести ограничение при выборе записи?
3. @Orbling: Я полагаю, вы имеете в виду Отчет-> Эксперт по выбору . Я не совсем уверен, возможно ли это в моем случае. SQL, который у меня есть, довольно сложный, и я получаю набор идентификаторов на основе критериев даты, упомянутых выше, а затем получаю некоторые результаты на основе этих идентификаторов и некоторых других критериев. Как я вижу в Selection Expert, я могу ссылаться на поля из предложения SELECT.
4. @cujo: Только что понял, что вы говорите о параметре Crystal, не уверен, какую версию вы используете, но в 2008 году Date (в отличие от DateTime) является опцией для параметров. Да, эксперт по выбору, я полагаю, вы можете использовать любое поле в схеме данных. Однако это приведет к большей нагрузке на отчет и SQL Server, поскольку данные будут сокращаться локально.
5. @Orbling: Да, это входной параметр для отчета. Дата выбирается из окна выбора даты Crystal. Я использую Crystal XI
Ответ №2:
Похоже, это случай, связанный с типом соединения. Ранее я использовал простое подключение JDBC. Теперь, когда я использую ODBC-соединение (драйвер Informix), проблема с форматом даты устранена.
Комментарии:
1. Как правило, я ненавижу, когда драйверы DB создают проблемы, которые исключительно сложно обнаружить.
Ответ №3:
Создайте пустой отчет и вставьте исходный отчет в качестве вложенного отчета. Теперь в основном отчете создайте статический параметр типа «Дата». Создайте новую формулу с именем ‘Date_conv’ и введите это:
Datetime({?Date_parameter})
Затем поместите вложенный отчет в основной отчет. Щелкните правой кнопкой мыши вложенный отчет и выберите Изменить ссылки вложенного отчета. Выберите формулу и переместите ее в область Ссылки на. Далее, из выпадающего списка в левом нижнем углу выберите параметр datetime вложенного отчета.Теперь отчет должен запрашивать «Дату» вместо даты-времени. Обратитесь к сайту —
http://scn.sap.com/thread/2085118