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