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 文件的页脚,以显示在报告的每一页上。当我触发 btnViewReport.Click 方法时,包含实际 Crystal ReportViewer 控件的 ReportViewer 表单,我像这样填充数据源......

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 打开未配置用户级安全性的数据库时,您将自动(并且以静默方式)以 user 身份登录Admin。当 Crystal Reports 提示您输入凭据时,请尝试使用Admin带有空密码的用户名。如果可行,请查看 Crystal Reports 是否提供“保存密码”或“保存登录信息”或类似的选项。

于 2013-04-27T11:43:41.440 回答
0

不知道我被要求登录的确切原因,但我发现如果我不事先填充对象数据源,它就会这样做。当我在加载报表查看器的按钮上填充数据源时,它不会要求登录。我遇到的另一个问题是,当我在子报表中有子报表时,它不会显示。经过更多研究后,我发现子报表中不能有子报表,因此当我解封报表时,数据现在显示得很好。感谢大家的帮助。

于 2013-04-30T12:37:15.967 回答