特定のセキュリティ設定なしで Access データベースを使用しています。エクスプローラーを使用してデータベースを問題なく開くことができますが、レポートを開こうとすると、ログイン資格情報が要求されません。[データベース ログイン] ダイアログに「サーバー名」というフィールドがあることに気付きました。これは、レポートで使用しているオブジェクトの名前空間とクラス名です。これは何が原因ですか?
///DAL Class
Option Strict On
Imports System.Data.OleDb
Imports FPCReportBuilder.Utilities
Namespace FPCReportBuilder.Data
Public Class DAL
Inherits DALCnn
Public Shared Function GetDataTableUsingReader(ByVal sql As String, Optional ByVal parameterList As List(Of DataParameter) = Nothing, Optional ByVal type As CmdType = CmdType.StoredProcedure) As DataTable
Dim cmd As OleDbCommand = CreateCommand(sql, parameterList, type)
Dim dt As New DataTable
Using cmd.Connection
cmd.Connection.Open()
dt.Load(cmd.ExecuteReader(CommandBehavior.CloseConnection))
End Using
Return dt
End Function
Private Shared Function CreateCommand(ByVal sql As String, Optional ByVal parameters As List(Of DataParameter) = Nothing, Optional ByVal type As CmdType = CmdType.StoredProcedure) As OleDbCommand
Dim cmd As New OleDbCommand(sql, GetConnection())
If type = CmdType.StoredProcedure Then
cmd.CommandType = CommandType.StoredProcedure
Else
cmd.CommandType = CommandType.Text
End If
If Not parameters Is Nothing Then
For Each parameter As DataParameter In parameters
Dim newParameter As OleDbParameter = cmd.CreateParameter()
newParameter.ParameterName = parameter.Name
newParameter.Value = parameter.Value
newParameter.OleDbType = parameter.DbType
newParameter.Direction = parameter.Direction
newParameter.Size = parameter.Size
cmd.Parameters.Add(newParameter)
Next
End If
Return cmd
End Function
End Class
End Namespace
///DALCnn Class
Option Strict On
Imports System.Data.OleDb
Namespace FPCReportBuilder.Data
Public MustInherit Class DALCnn
Protected Friend Shared Function GetConnection() As OleDbConnection
Return New OleDbConnection(My.Settings.cnnString)
End Function
End Class
End Namespace
コードを実行すると、これはすべて正常に機能します。パブリック共有メソッドである ReportData.GetSection1Complete() のようなクラスを呼び出すと、データが正常に返されます。
編集*
私はどこかに行き着くようです。ReportDate プロパティを MainReport.rpt ファイルのページ フッターに追加して、レポートの各ページに表示します。実際の Crystal ReportViewer コントロールを含む ReportViewer フォームである btnViewReport.Click メソッドを起動すると、データソースを次のように入力します...
Private Sub btnViewReport_Click(sender As System.Object, e As System.EventArgs) Handles btnViewReport.Click
Try
Dim repViewer As New ReportViewer()
Dim reportList As New List(Of Report)
reportList.Add(objReport)
repViewer.MainReport1.Database.Tables("Report").SetDataSource(reportList)
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Sub
これはうまくいくようです。ただし、MainReport.rpt には、SubReport も含まれる SubReport が含まれています。ReportData.GetSection1Complete() という別のクラスからメソッドを呼び出して SubReport にデータを入力しようとしていますが、その特定の DataSource を入力する方法がわかりません。私は試した...
repViewer.MainReport1.Subreports("Section1.rpt").Subreports("Section1Complete.rpt").Database.Tables("ReportData").SetDataSource(ReportData.GetSection1Complete())
これにより、「サブレポート内ではサポートされていません」と表示されます。例外。