MaioNaze Ответов: 1

Не удается просмотреть данные в crystal report


Я использую VS 2019 с VB. Я написал несколько хрустальных отчетов с одного стола без каких-либо проблем. Последнее сообщение-совсем другая история. Отчет отображает данные из 2-х таблиц (заголовки и заимствования). Я делаю внутреннее соединение SQL на 2 таблицах, и я уверен, что эта часть работает, потому что я могу отобразить сообщение, которое показывает данные из каждой таблицы.

Проблема, по-видимому, заключается в том, когда я заполняю набор данных. Для других отчетов я бы закодировал адаптер.Fill(DataSet, "TableName"). Но с соединением я не уверен, какое имя таблицы мне следует использовать. Я рвал на себе волосы в этот день, и у меня почти ничего не осталось. Если кто-нибудь может помочь, я буду очень признателен.

Это мой код.:
Private Sub frmReport4_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Dim rpt As New CrystalReport5()
        Dim myAdapter As OleDb.OleDbDataAdapter
        Dim myDataset As New DataSet("TEMP_DBDataSet")
        Dim DBdtTEMP As New DataTable
        Dim DBdrX As DataRow

        strReportSQL = "SELECT * FROM Titles INNER JOIN LoanTo ON Titles.TitleID = LoanTo.TitleID"

        myAdapter = New OleDb.OleDbDataAdapter(strReportSQL, DBconn)
        myAdapter.Fill(DBdtTEMP)
        
		'I CAN SEE THE DATA FROM THE 2 TABLES HERE
		DBdrX = DBdtTEMP(3)
        MsgBox("data: " & DBdrX("Title") & " MORE " & DBdrX("Borrower"))

		'BUT I GET NOTHING DISPLAYED ON THE REPORT
        myAdapter.Fill(myDataset)
        rpt.SetDataSource(myDataset)
        rpt.PrintOptions.PaperOrientation = CrystalDecisions.Shared.PaperOrientation.Landscape
        CrystalReportViewer1.ReportSource = rpt
    End Sub  'FORM LOAD


Что я уже пробовал:

Пробовал разные версии адаптера.заполните команду. Попробовал позвонить просто с помощью 1 таблицы без соединения, и это сработало. Я могу создать отчет из каждой таблицы независимо. Полученные строки точны, поэтому я почти уверен, что правильно обращаюсь к базе данных.

Прошло уже много лет с тех пор, как я кодировал, и еще больше с тех пор, как мне нужно было попросить о помощи, поэтому, пожалуйста, извините за любые недочеты в моей презентации.

1 Ответов

Рейтинг:
4

Richard Deeming

Если в отчете предполагается, что источник данных будет содержать две разные таблицы, вам нужно будет загрузить обе таблицы отдельно, не соединяя их.

Dim myDataset As New DataSet("TEMP_DBDataSet")

Dim myAdapter As New OleDb.OleDbDataAdapter("SELECT * FROM Titles", DBconn)
myAdapter.Fill(myDataset, "Titles")

myAdapter = New OleDb.OleDbDataAdapter("SELECT * FROM LoanTo", DBconn)
myAdapter.Fill(myDataset, "LoanTo")

rpt.SetDataSource(myDataset)


MaioNaze

Это было быстро! Большое вам спасибо. Я попробовал то, что вы предложили, и это сработало великолепно.