Найдите Crystal Reports в Visual Studio и определите, используется ли таблица / proc SQL - PullRequest
4 голосов
/ 23 января 2009

Здравствуйте, у меня есть несколько отчетов о кристаллах в моем проекте VS2008.

Я внес изменения в пару таблиц своей базы данных и хочу убедиться, что я внес все необходимые изменения в отчеты. Я сделал стандартный поиск VS для конкретной хранимой процедуры, которая используется, и она не нашла результатов. Однако когда я вошел в отчет и посмотрел на «Выбор эксперта», я увидел, что эта процедура действительно используется.

Есть ли способ легко найти во всех отчетах эту процедуру (и другие)? Или я должен идти в каждый отчет и проверять?

Спасибо

Ответы [ 3 ]

1 голос
/ 26 января 2009

Это часть VB-процедуры, которую я построил для создания списка всех таблиц, используемых моими отчетами. Отчеты перечислены в «Таблице отчетов», и я использую памятное поле для хранения названия всех используемых таблиц. После этого достаточно легко обновить все запрошенные отчеты после изменения таблиц.

Public function tablesUsedByAReport(myReportName as string) as string
Dim m_report As CRAXDRT.Report, _
      m_crystal As CRAXDRT.Application, _
      m_tablesUsedByAReport As String

Dim m_table As CRAXDRT.DatabaseTable, _
      m_section As CRAXDRT.section, _
      m_objet As Object, _
      m_subReport As CRAXDRT.SubreportObject

Set m_crystal = New CRAXDRT.Application
Set m_rapport = m_crystal.OpenReport(m_nomRapport, 1)

'table names in the report'
For Each m_table In m_rapport.Database.tables
    m_tablesUsedByAReport = m_tablesUsedByAReport & m_table.location & ";"
Next m_table

'table names in each of the subreports'
For Each m_section In m_rapport.Sections
    For Each m_objet In m_section.ReportObjects
        If m_objet.Kind = crSubreportObject Then
            Set m_subReport = m_objet
            Set m_report = m_subReport.OpenSubreport
            For Each m_table In m_rapport.Database.tables
                m_tablesUsedByAReport = m_tablesUsedByAReport & m_table.location & ";"
           Next m_table
        End If
    Next m_objet
Next m_section

'my tables list'
tablesUsedByAReport = m_tablesUsedByAReport

End function    
0 голосов
/ 16 марта 2009

Я изменил код Филиппа так:

Public Function tablesUsedByAReport(ByRef report As CrystalDecisions.CrystalReports.Engine.ReportClass) As String

    Dim m_tablesUsedByAReport As String = String.Empty

    Dim myTables As Tables = report.Database.Tables

    'table names in the report'
    For Each myTable As CrystalDecisions.CrystalReports.Engine.Table In myTables
        m_tablesUsedByAReport = m_tablesUsedByAReport & myTable.Location & ";"
    Next
    For Each subreport As CrystalDecisions.CrystalReports.Engine.ReportDocument In report.Subreports
        For Each mytable As CrystalDecisions.CrystalReports.Engine.Table In subreport.Database.Tables
            m_tablesUsedByAReport = m_tablesUsedByAReport & mytable.Location & ";"
        Next
    Next
    Return m_tablesUsedByAReport

End Function
0 голосов
/ 12 февраля 2009

У меня была похожая проблема с отчетами служб отчетов. Я прекратил использовать бесплатное приложение с именем Agent Ransack . Я уверен, что есть много инструментов, которые делают то же самое, но это то, что я использую. Я просто указываю на папку и помещаю искомое имя таблицы в «содержащее текстовое поле». Я извлекаю исходный код из TFS в папку с проектами VS, и это приложение не занимает много времени для поиска во всех подкаталогах, и кажется, что оно всегда находит то, что мне нужно. Он не интегрирован в VS, но, возможно, стоит попробовать, если никто не предложит лучшего решения.

...