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