cancel
Showing results for 
Search instead for 
Did you mean: 

vb.net fails to load subreport with error "The report has no tables"

Former Member
0 Kudos

We have encountered sporadic problems loading subreports in a vb.net application. The application is set up to use both trusted and non trusted connections based upon a configuration setting. For trusted connections the subreports always load properly, for non trusted connections they do not (though the main report loads with no problem). All of the datasets for the reports are SQL select statements whose fields match the fields in the report. The reports (main report and subreports) use a SQL commands as the dataset. Sample code for one of the reports is below. The code always fails on the .Subreports(u201Cxxu201D).SetDataSource statement (though sometimes the first subreport be successful and the second will fail).

We are using:

Microsoft Visual Studio 2005 Version 8.0.50727.762 (SP.050727-7600)

Microsoft .NET Framework Version 2.0.50727 SP1

Microsoft Visual Studio 2005 Professional Edition - ENU Service Pack 1

We are experiencing the problem on various versions of Windows but I am currently testing on Windows XP Professional Version 2002 SP3.

The report is being created with Crystal 10.0.0.533 (we cannot upgrade from Crystal 10 without application changes and extensive QA).

Any suggestions are appreciated, this is a critical problem for us.

Sample code:

Public Function PrintFaceSheet(ByVal Filename As String, ByVal MainTable As DataTable, ByVal SubTable As DataTable, ByVal SubTableMeds As DataTable, Optional ByVal Preview As Boolean = False, Optional ByRef ADO As NDSI.ADO.Connection = Nothing) As Boolean

Try

Dim mobjReport As New CrystalDecisions.CrystalReports.Engine.ReportDocument

If System.IO.File.Exists(Filename) Then

With mobjReport

.Load(Filename)

If ADO IsNot Nothing Then

Dim ldscConnections As CrystalDecisions.Shared.DataSourceConnections = .DataSourceConnections

Dim lconInfo As CrystalDecisions.Shared.IConnectionInfo = ldscConnections(0)

lconInfo.SetConnection(ADO.Server, ADO.Database, ADO.Trusted)

If Not ADO.Trusted Then

lconInfo.SetLogon(ADO.Username, ADO.Password)

Else

lconInfo.SetLogon("", "")

End If

End If

.SetDataSource(MainTable)

.VerifyDatabase()

.Subreports("FSContacts").SetDataSource(SubTable)

'MDM 12/23/08: Client medications added to Clinical face sheet

.Subreports("ClientMedsSub").SetDataSource(SubTableMeds)

' .VerifyDatabase()

'Use Built-In Preview Window

If Preview Then

Dim lfrm As New NDSI.Reporting.PreviewWindow

With lfrm

.Viewer.ReportSource = mobjReport

.Viewer.Zoom(1)

.ShowDialog()

End With

Else

.PrintToPrinter(1, True, 1, 0)

End If

Return True

End With

Else

'2008.06.19 - VBL - Added log record on error

ADO.AddToLog(NDSI.ADO.Connection.LogTypeEnum.Problem, "Missing report", "Report " & Filename & " does not exist. Please check the path and try again.")

End If

Catch ex As Exception

'2008.06.19 - VBL - Added log record on error

ADO.AddToLog(NDSI.ADO.Connection.LogTypeEnum.Problem, "Report Error", ex.Message)

Return False

End Try

End Function

End

Accepted Solutions (1)

Accepted Solutions (1)

former_member183750
Active Contributor
0 Kudos

A bit of clarification needed first. I note that you are using CR 10 to create the report, but I am not sure what version are the CR assemblies used in the report. I suspect you are using the version of Cr that bundled with .NET 2005. Your assemblies would then be version 10.2.3600 - but please do confirm.

Next, I am not sure about what error is thrown. You mention that the "The code always fails", but what is the error?

The above is for completness in case my troubleshooting idea below does not pan out.

If possible, use a report that has one subreport - just simplifies the troubleshooting. Since you are passing ADO .NET datasets to the report, I'd like you to write the dataset(s) to XML as:

myDataset.WriteXml(xmlPath, XmlWriteMode.WriteSchema)

Do this just before you pass the dataset to the subreport:

myDataset.WriteXml(xmlPath, XmlWriteMode.WriteSchema)

.Subreports("ClientMedsSub").SetDataSource(SubTableMeds)

Now, open the report in the CR designer. Go to the design view of the subreport. Go to the Database menu and select "Set Datasource Location".

In the "Replace with" pane, choose ADO .NET (XML) driver and point to the above created xml. Click on the <Update> button. What happens here? Do you get and error? A field mapping dialog? Does the report and subreport work?

Ludek

Answers (0)