1

特定のセキュリティ設定なしで 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())

これにより、「サブレポート内ではサポートされていません」と表示されます。例外。

4

2 に答える 2

1

Access を使用して、ユーザー レベル セキュリティが構成されていないデータベースを開くと、ユーザーとして自動的に (サイレント モードで) ログインされますAdmin。Crystal Reports で資格情報の入力を求めるプロンプトが表示されたらAdmin、空のパスワードでユーザー名を使用してみてください。それが機能する場合は、Crystal Reports が「パスワードを保存する」または「ログイン情報を保存する」などのオプションを提供するかどうかを確認します。

于 2013-04-27T11:43:41.440 に答える
0

ログオンを求められた理由は正確にはわかりませんが、事前にオブジェクト データソースにデータを入力しなければ、これが行われることがわかりました。レポート ビューアーをロードするボタン クリックでデータ ソースを入力すると、ログオンが要求されません。私が抱えていた別の問題は、サブレポート内にサブレポートがある場合、それが表示されないことでした。さらに調査した結果、サブレポート内にサブレポートを含めることはできないことがわかったため、レポートのカプセル化を解除すると、データが正常に表示されるようになりました。みんなからの助けに感謝します。

于 2013-04-30T12:37:15.967 に答える