Не удается установить формулу выбора отчета Crystal программно

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

Теперь у нас есть старое приложение 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. Я уже пробовал выполнить База данных> Проверить базу данных из меню, и это говорит о том, что отчет был обновлен и не помог вообще.


person eidylon    schedule 05.04.2010    source источник


Ответы (3)


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

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

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

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

person PowerUser    schedule 05.04.2010

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

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

person craig    schedule 06.04.2010
comment
Что ж, проблема в том, что он ничего не делает. ЛИБО поведение было бы приемлемым, поскольку в самом отчете нет формулы выбора записи. Так что добавит он или заменит [НИЧЕГО] меня действительно не волнует. Но он вообще не помещает новую формулу в отчет ... даже несмотря на то, что PESetSelectionFormula возвращает УСПЕХ. - person eidylon; 06.04.2010
comment
Попробуйте так: создайте формулу выбора записи в дизайнере. Затем используйте компонент COM, чтобы получить это значение. Это правильно работает? Если да, проверьте последний символ в строке. Это символ завершения нуля (я не могу вспомнить его настоящее имя)? - person craig; 06.04.2010

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

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

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

person eidylon    schedule 07.04.2010
comment
Хотя, по общему признанию, мы все еще работаем с Crystal 8.5, и я знаю, что они как минимум до 11? Я знаю, что конструктор был Существенно улучшен ... может быть, базовая функциональность тоже, если честно. - person eidylon; 07.04.2010
comment
Что касается CR12 / 2008 ... нет, нет. CR и BOb, IMHO, худшее платное программное обеспечение, которое я когда-либо использовал. Всего один крошечный пример из десятков: стопки модальных диалогов для каждого небольшого изменения. - person ; 25.01.2011