Я хотел бы извлечь SQL-запросы из Crystal Reports.rpt файлов, есть ли способ сделать это?
Я хотел бы извлечь SQL-запросы из файлов Crystal Reports.rpt, есть ли способ сделать это?
У меня нет продуктов Crystal Reports, просто файлы .rpt.
Ответы
Ответ 1
Мой опыт связан со старыми версиями Crystal (8,9) - я не знаю, как выглядят форматы файлов для более поздних версий. Тем не менее, стоит открыть файлы в текстовом редакторе на всякий случай, но для форматов файлов, которые я видел, текст запроса недоступен таким образом.
Если я правильно помню, некоторые версии Visual Studio 2003 поставлялись с инструментами для обработки файлов Crystal.rpt(но я думаю, это не очень полезно для вас, так как если бы у вас было это уже, вы бы не спрашивали!).
Это не очень творческое предложение, но, возможно, вашим самым быстрым маршрутом будет загрузка 30-дневная пробная версия текущих Crystal Reports, и посмотрите, откроет ли это файлы для вас.
Ответ 2
Вот пример .NET, который захватывает Command Sql из всех Crystal Reports в данном каталоге. Для этого требуется установить SDK Crystal 2008.. SDK (вы можете загрузить пробную версию из SAP):
foreach (string file in Directory.GetFiles("c:\\projects\\Reports", "*.rpt"))
{
Console.WriteLine(String.Format("Processing {0}...", file));
var doc = new CrystalDecisions.CrystalReports.Engine.ReportDocument();
doc.Load(file);
foreach (dynamic table in doc.ReportClientDocument.DatabaseController.Database.Tables)
{
if (table.ClassName == "CrystalReports.CommandTable")
{
string commandSql = table.CommandText;
//TODO: do something with commandSql
}
}
}
Чтобы получить SQL как Crystal, он будет создавать его при запуске отчета, см. эту ссылку: SAP Note 1280515 - Как извлечь SQL-запрос из отчетов Crystal с помощью RAS SDK.
Я считаю, что для этого вам нужно предоставить значения параметров отчета, чтобы Crystal мог подключаться к базе данных, чтобы построить SQL. В этом примере, поскольку используется элемент управления Просмотр отчетов, Crystal может запрашивать у пользователя параметры.
Ответ 3
В "Crystal Reports ActiveX Designer Designer and Runtime Library" (craxddrt.dll) свойство Report.SQLQueryString будет делать то, что вы хотите.
Я не могу найти эквивалентное свойство в SDK.NET и, поверьте, я искал.
** редактировать **
Похоже, что для получения этой информации можно использовать In-Process RAS Server:
CrystalDecisions.ReportAppServer.DataDefModel.CommandTableClass.CommandText
Ответ 4
Другой способ: если вы можете запускать отчеты, вы можете подключить SQL Profiler к своей базе данных и захватить входящий SQL на стороне базы данных.
Ответ 5
В Visual Studio выберите файл .rpt и перейдите в полевой проводник, щелкните правой кнопкой мыши на DatabaseFields. Нажмите на запрос SQL-запроса, чтобы просмотреть запрос.