This is a part of the VB proc I built to generates the list of all tables used by my reports. Reports are listed in a 'reports Table', and I use a memo field to store the name of all used tables. It is then quite easy to update all requested reports once tables have been modified.
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