在水晶报表上传递参数,用代码连接访问,vb.net

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/13136198/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-17 10:57:15  来源:igfitidea点击:

pass parameters on crystal report , connect access with code , vb.net

vb.netms-accessparameterscrystal-reportsvisual-studio-2005

提问by Agis Markouizos

I want to search clients that got to shop between two dates. The code I use seems alright and it doesn't return any error but the CR returns everything - It does not use the date search function. The CR I use is tested with a simple program that open CR and works fine. database is ms access and code is in visual studio 2005

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

The second issue I have is that despite i use the connection info part it still ask me for a code PS. sorry for my bad formatting , i am new in stackoverflow and i find it hard to make a post thank you! -Agisilaos

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

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

采纳答案by Hyman Gajanan

Don't understand what exactly your problem is but I assume that you want to pass parameter to report and filter report data on those parameters also want to set run-time connection settings of crystal report.

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

First create parameter field in your report (right click on parameter fields and click on add in crystal designer) Now go to “crystal report->report->select expert” menu in visual studio crystal report designer and set data filter condition using these parameter fields. For passing parameter to report use parameter name and value like this

首先在您的报表中创建参数字段(右键单击参数字段并单击在水晶设计器中添加)现在转到visual studio水晶报表设计器中的“水晶报表->报表->选择专家”菜单并使用这些参数设置数据过滤条件领域。对于传递参数以报告使用参数名称和值,如下所示

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

you don't have to set any server name for ms access database better way is create dsn for your database file and use that dsn in your report so your report will never ask for database file unless data file is missing you can even create dsn programmatically at run time if want that let us know if you wat to set sql like server database password and login at runtime use

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

repDoc.DataSourceConnections(0).SetLogon("usrID","psw")                        
repDoc.DataSourceConnections(0).IntegratedSecurity = False