Это часть 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