0

我想搜索在两个日期之间购物的客户。我使用的代码似乎没问题,它没有返回任何错误,但 CR 会返回所有内容 - 它不使用日期搜索功能。我使用的 CR 使用一个简单的程序进行测试,该程序打开 CR 并且工作正常。数据库是 ms 访问和代码是在 Visual Studio 2005

我遇到的第二个问题是,尽管我使用了连接信息部分,但它仍然要求我输入代码 PS。抱歉我的格式不好,我是stackoverflow的新手,我发现很难发帖谢谢!-阿吉西劳斯

Imports CrystalDecisions.CrystalReports.Engine
Imports CrystalDecisions.Shared
Public Class Form1
    Dim crConnectionInfo As New ConnectionInfo()


 Private Sub Button1_Click(ByVal sender As System.Object, _
   ByVal e As System.EventArgs) Handles Button1.Click

   Dim cryRpt As New ReportDocument


cryRpt = New CrystalDecisions.CrystalReports.Engine.ReportDocument
        cryRpt.Load("C:\Users\agis\Documents\Visual Studio 2005\Projects\new_contracts     _of_month\new_contracts _of_month\CrystalReport2.rpt",     CrystalDecisions.Shared.OpenReportMethod.OpenReportByTempCopy)


With crConnectionInfo
        .ServerName = "C:\Users\agis\Desktop\Insurance database\Insurancemanager.mdb"
        .UserID = "Admin"
        .Password = "kos"
        .DatabaseName = "insurancemanager"
    End With

     'first parameter
    Dim crParameterFieldDefinitions As ParameterFieldDefinitions
    Dim crParameterFieldDefinition As ParameterFieldDefinition
    Dim crParameterValues As New ParameterValues
    Dim crParameterDiscreteValue As New ParameterDiscreteValue
    crParameterDiscreteValue.Value = Convert.ToDateTime(TextBox1.Text) 

    crParameterFieldDefinitions = cryRpt.DataDefinition.ParameterFields
    crParameterFieldDefinition = crParameterFieldDefinitions.Item("startdate")
    crParameterValues = crParameterFieldDefinition.CurrentValues
    crParameterValues.Add(crParameterDiscreteValue)
    crParameterValues.Clear()

    ' second parameter : 
    Dim crParameterFieldDefinitions2 As ParameterFieldDefinitions
    Dim crParameterFieldDefinition2 As ParameterFieldDefinition
    Dim crParameterValues2 As New ParameterValues
    Dim crParameterDiscreteValue2 As New ParameterDiscreteValue
    crParameterDiscreteValue2.Value = Convert.ToDateTime(TextBox2.Text)
    TextBox3.Text += "   " + crParameterDiscreteValue2.Value 
    crParameterFieldDefinitions2 = cryRpt.DataDefinition.ParameterFields
    crParameterFieldDefinition2 = crParameterFieldDefinitions2.Item("enddate")
    crParameterValues2 = crParameterFieldDefinition2.CurrentValues
    crParameterValues2.Clear()


    crParameterValues2.Add(crParameterDiscreteValue2)
    crParameterFieldDefinition.ApplyCurrentValues(crParameterValues)
    crParameterFieldDefinition2.ApplyCurrentValues(crParameterValues2)
     CrystalReportViewer1.ReportSource = cryRpt
    CrystalReportViewer1.Refresh()
End Sub




    End Class
4

1 回答 1

0

不明白你的问题到底是什么,但我假设你想传递参数来报告和过滤这些参数的报告数据还想设置水晶报告的运行时连接设置。

首先在您的报告中创建参数字段(右键单击参数字段并单击添加水晶设计器)现在进入Visual Studio水晶报告设计器中的“水晶报告->报告->选择专家”菜单并使用这些参数设置数据过滤条件字段。为了将参数传递给报告,请使用参数名称和值,如下所示

cryRpt.ParameterFields("parametername").CurrentValues.AddValue(objVal)
cryRpt.ParameterFields("fromdatetime").CurrentValues.AddValue(Now)

您不必为 ms access 数据库设置任何服务器名称更好的方法是为您的数据库文件创建 dsn 并在您的报告中使用该 dsn,这样您的报告将永远不会要求数据库文件,除非数据文件丢失您甚至可以以编程方式创建 dsn在运行时如果想要让我们知道您是否要设置像服务器数据库密码这样的 sql 并在运行时登录使用

repDoc.DataSourceConnections(0).SetLogon("usrID","psw")                        
repDoc.DataSourceConnections(0).IntegratedSecurity = False
于 2012-10-30T11:18:48.617 回答