Member 12654313 Ответов: 2

Проблема в crystal reports с SQL


im facing issue in crystal reports while using sql statement .


select Top 1 openingbalance,dated
FROM ledgerbalance 
where accounttitle= '{?tran}' and  dated='{?dateb}'
order by ledgeridnew asc, dated desc;



я получаю ошибку

Failed to retrive data from database.
details: ado error code: 0x
sourcemicrosoft sql server native client 10.0
descriptionincorrect syntax near 02
sql state:42000
native error: [database vendor code:102]


Что я уже пробовал:

select Top 1 openingbalance,dated
FROM ledgerbalance 
where accounttitle= '{?tran}' and  dated='{?dateb}'
order by ledgeridnew asc, dated desc;

ZurdoDev

Вам нужно отладить его и посмотреть, каковы фактические значения в ваших параметрах. Похоже, они не такие, как вы думаете.

Member 12654313

параметры верны
один из них Тран а другой датеб

ZurdoDev

Да, но передаваемые значения, вероятно, не такие, как вы ожидаете, что приводит к синтаксической ошибке.

Member 12654313

на самом деле tran и dateb im используют для получения данных из базы данных ledger ...tran - это идентификатор трансекции, а date-дата входа. теперь, если я использую только
где accounttitle='{tran}', то он работает нормально, но если я использую
где accounttitle='{tran}' и dated='{dateb}'
тогда это даст ошибку

ZurdoDev

Тогда значение, которое вводится в dateb, не является датой. Вот почему вы получаете синтаксическую ошибку. Синтаксическая ошибка означает, что sql, который вы отправляете, недопустим.

Все, что вам нужно сделать, это отладить его и посмотреть, что такое фактический sql, и вы сразу же увидите проблему. Но мы не можем запустить ваш код для вас, поэтому я не могу сказать вам, в чем проблема с датой.

Maciej Los

Вы уверены в этом ['] знак необходим вокруг параметра даты?
Насколько я помню, это не так.

Member 12654313

я удалил его и попробовал, но все та же проблема

2 Ответов

Рейтинг:
2

Maciej Los

Что-то не так с вашим sql - запросом или источником данных crystal report.
Во-первых, проверьте источник данных для crystal report. При необходимости перевяжите его заново.
Во-вторых, Проверьте инструкцию sql. Измените свои входные параметры на постоянные значения и проверьте, помогает ли это. Если да, то измените постоянное значение по одному. Я бы начал с того, что {?tran}. Если crystal report будет отображать данные без ошибок, то измените постоянное значение на параметр для {?dateb}. Если вы получите сообщение об ошибке, то это означает, что параметр даты передается с неправильным форматом.
Видеть: SET DATEFORMAT (Transact-SQL) - SQL Server | Microsoft Docs[^] для получения более подробной информации.


Member 12654313

привет, Мацей.
как ты
спасибо за ваш ответ. на самом деле я попробовал с {?tran}, и он работает нормально, но когда я попробовал с датой, он дал ошибку. в базе данных формат даты-2020-02-01, а в crystal reports-01-02-2020 ... как я могу это исправить ?

Maciej Los

Изменение формата даты при передаче аргумента в запрос ;)
Например:

DateTime dateb = new DateTime(2020, 2, 1);
myReport.SetParameterValue("dateb", dateb.ToString("yyyy-MM-dd"));

Member 12654313

итак, могу ли я написать запрос, как показано ниже, в crystal reports?

выберите Top 1 openingbalance,датированный
Из леджербаланса
где accounttitle='{?tran} и dated={?dateb}
заказ от ledgeridnew asc, датированный desc;


DateTime dateb = новый DateTime(2020, 2, 1);
myReport.SetParameterValue("dateb", dateb.ToString("гггг-ММ-ДД"));

Maciej Los

Эта часть:

DateTime dateb = new DateTime(2020, 2, 1);
myReport.SetParameterValue("dateb", dateb.ToString("yyyy-MM-dd"));

это не вопрос!
Это код, который отвечает за передачу параметра в Crystal Report.

Member 12654313

очень жаль, что спрашиваю снова . должен ли я использовать его в части формата параметра?например, щелкните правой кнопкой мыши параметр и в Формуле? или в vb.net

Maciej Los

vb.net (я использую c#, так что вы должны преобразовать его в vb.net).

Member 12654313

хорошо я проверю это

Member 12654313

проблема решена
я исправляю это, внося изменения в нижеприведенный код

выбрать первые 1 от,openingbalance
из леджербаланса
где dated=({?dateb}) и accounttitle='{?tran}'
заказ по ledgeridnew desc

дата должна быть ({?dateb}) в таком формате вместо {?dateb} и Тран должен быть '{?Тран}'

Рейтинг:
10

Member 12654313

issue resolved
i fix it by doing changes in below code

select top 1 dated,openingbalance
from ledgerbalance
where dated=({?dateb}) and accounttitle='{?tran}'
order by ledgeridnew desc

date must be ({?dateb}) in this format instead of {?dateb} and tran has to be '{?tran}'