Well, you'll need to get the data into a single array, which shouldn't be too difficult. Once you've done that in code, then you need to do the following:
1) In Crystal, your report needs to be designed to use the Crystal Data Object (CDO). When first creating the report, use the Data Explorer and open the "More Data Sources" folder. Select "Active Data", then "Field Definitions Only" (Actually, if you can write a SQL statement that will return a dataset identical in schema to what is in your array, you could use "Active Data (ADO)", which would make it a little easier to build your report). At the bottom of the field definitions screen, click the New button and define the field names and data types that will be used in the report. Use the "File" menu option in the small field definition screen to save the file, then close it and make sure you double-click on it in the data explorer to add it as a datasource for your report.
2) Create your report.
3) In vb, you need to create a Crystal CDO object, as well as the Crystal report object you are already creating. The CDO takes an array. So you create CDO object, define the array elements it will use, and then pass it an array. Some sample code is given below:
Dim crApp As New CRAXDRT.Application
Dim crRpt As CRAXDRT.Report
Private Sub Form_Load()
Dim crArea As CRAXDRT.Area
Dim crCDO As New CrystalDataObject.CrystalComObject
Dim x As Integer
Dim y As Integer
Set crRpt = crApp.OpenReport(App.Path & "/CDO_Sample_Report.rpt "
crCDO.AddField "Customer Name", vbString
crCDO.AddField "Last Year's Sales", vbNumber
Dim Rows(5, 1) As Variant '6 rows with 2 columns - zero-based array
Rows(0, 0) = "George Washington"
Rows(0, 1) = 2000
Rows(1, 0) = "John Adams"
Rows(1, 1) = 4000
Rows(2, 0) = "Thomas Jefferson"
Rows(2, 1) = 4500
Rows(3, 0) = "James Madison"
Rows(3, 1) = 3000
Rows(4, 0) = "John Q. Adams"
Rows(4, 1) = 3500
Rows(5, 0) = "Alexander Hamilton"
Rows(5, 1) = 200
'Here is where the array gets passed to the CDO
crCDO.AddRows Rows
crRpt.DiscardSavedData
crRpt.Database.Tables(1).SetDataSource crDCO, 3
CRViewer1.ReportSource = crRpt
Me.WindowState = 2
CRViewer1.ViewReport
I know that is a lot of info, and it may look intimidating. Just take it a step at a time. Let me know if you need any clarifications.