Не удается установить формулу выбора Crystal Report программно - PullRequest
1 голос
/ 05 апреля 2010

во-первых, я терпеть не могу Кристалл! Хорошо, это у меня в груди ...

Теперь у нас есть старое приложение VB6 , которое мы поддерживаем для клиента и которое использует библиотеку Crystal Automation для программного изменения формул выбора записей в группе Crystal Reports 8.5 отчетов. ,

Есть два отчета, которые ПОЧТИ идентичны. Я должен был изменить их недавно, чтобы добавить другое поле из другой таблицы. Когда я добавил таблицу в отчеты, хотя она добавила ее в визуальный конструктор, она не добавила ее в предложение FROM оператора SQL. Итак, я вручную отредактировал оператор SQL, чтобы добавить в дополнительное соединение. КО, отлично работает. Если я запускаю отчеты в режиме предварительного просмотра Crystal, они работают точно так, как ожидается.

Теперь пользователи пошли тестировать изменения из приложения VB. Один из отчетов работает отлично и модно. Однако в другом отчете не удалось установить формулу выбора, как ожидалось.

Код устанавливает формулы выбора с помощью функции PESetSelectionFormula. Я проверил, что строка, передаваемая в функцию как новая формула выбора, является правильной с помощью пошагового анализа переменных. Вызов PESetSelectionFormula, кажется, работает нормально, и возвращает значение 1, которое, насколько я могу найти, указывает на успех. (Другой отчет, который работает нормально из кода, также возвращает 1.)

Однако отчет завершается с ошибкой: Error Code: 534 - Error detected by database DLL. Код для целей отладки выводит строку SQL, которая в данный момент используется отчетом. SQL, выходящий из отчета:

SELECT ... FROM ... 
WHERE

ORDER BY ...

Как вы можете видеть, предложение WHERE пустое, и я бы предположил, почему DLL базы данных подключается к этому утверждению. Я не понимаю, почему библиотека автоматизации не устанавливает предложение WHERE, даже если вызову PESetSelectionFormula передается правильная строка и возвращается успех. Я подумал, что, возможно, это потому, что я вручную отредактировал SQL в отчете, чтобы добавить таблицу, которую он не добавлял, но я сделал то же самое в другом почти идентичном отчете, и этот работает нормально.

У кого-нибудь есть идеи, почему PESetSelectionFormula может сообщить об успехе, но на самом деле ничего не делать?

P.S. Я уже пытался сделать База данных> Проверка базы данных из меню, и это говорит о том, что отчет был обновлен и не помогал вообще.

Ответы [ 3 ]

0 голосов
/ 06 апреля 2010

В некоторых версиях CR PESetSelectionFormula добавляет новое значение к существующей формуле выбора записи, в других версиях PESetSelectionFormula заменяет существующую формулу выбора записи новым значением.

Я не помню, когда произошел этот переход, но вам должно быть легко определить, какое поведение происходит.

0 голосов
/ 07 апреля 2010

Хорошо, это типично для того, почему я просто презираю Crystal Reports.

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

Мне действительно не нравится программное обеспечение, которое просто автоматически останавливается и начинает работать так. Спасибо за идеи.

0 голосов
/ 05 апреля 2010

Я никогда не использовал PESetSelectionFormula , но у меня возникли проблемы с импортом других приемлемых данных:

  1. Использует ли ваш окончательный запрос SQL какие-либо необычные функции, т.е. nz ()? Кристалл не всегда распознает функции VB, imho.

  2. У вас есть нулевые значения в ваших импортированных данных, которые создают конфликты?

  3. После сбора ваших данных, вы можете поместить их во временную таблицу и сказать Crystal, чтобы они взяли данные из этой временной таблицы? Если у вас есть проблемы с № 1 или № 2, это может быть хорошим решением проблемы.

...