Я хотел бы извлечь 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-запроса, чтобы просмотреть запрос.