Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net (VB/ACCESS/CR)基于ACCESS窗体过滤VB Crystal报表_Vb.net_Ms Access_Crystal Reports - Fatal编程技术网

Vb.net (VB/ACCESS/CR)基于ACCESS窗体过滤VB Crystal报表

Vb.net (VB/ACCESS/CR)基于ACCESS窗体过滤VB Crystal报表,vb.net,ms-access,crystal-reports,Vb.net,Ms Access,Crystal Reports,在我开始讨论这个问题之前,这里是对正在发生的事情的概述 通道 具有选择作业ID的组合框的窗体 水晶报告 从多个表中调用信息的报表,所有这些表都基于JobID VB 使用Crystal Reports插件的表单,在Crystal Reports Designer应用程序之外显示报告 我的问题 我需要在VB中显示的报告被过滤到Access组合框中选择的作业 使现代化 我将我的数据库链接到VS2012,并且运行良好,没有任何问题。我可以很容易地从表中提取信息。我需要做的是将组合框从访问表单链接到VS2

在我开始讨论这个问题之前,这里是对正在发生的事情的概述

通道 具有选择作业ID的组合框的窗体

水晶报告 从多个表中调用信息的报表,所有这些表都基于JobID

VB 使用Crystal Reports插件的表单,在Crystal Reports Designer应用程序之外显示报告

我的问题 我需要在VB中显示的报告被过滤到Access组合框中选择的作业

使现代化 我将我的数据库链接到VS2012,并且运行良好,没有任何问题。我可以很容易地从表中提取信息。我需要做的是将组合框从访问表单链接到VS2012以过滤报告

我希望这能使我的问题更清楚。

更新2
我能够根据Access中ComboBox的值来创建SELECT查询,因此我应该能够使用它来访问我要查找的值,但是,我仍然需要知道如何使用该值作为CR的过滤器。

一个可能的解决方案是在Access中创建一个保存的Select查询,该查询将复制CR中的查询,并将该查询命名为[JobReport\u base]。然后,在Access中创建另一个已保存的Select查询,并将其命名为[JobReport\u current]。在Access表单中添加一些代码,更新[JobReport\u current]查询的.SQL属性,以仅返回所选[JobId]的记录,如

Dim qdf As DAO.QueryDef
Set qdf = CurrentDb.QueryDefs("JobReport_current")
qdf.SQL = "SELECT * FROM JobReport_base WHERE JobId = " & cbxJobId
Set qdf = Nothing

然后更新Crystal Report,从[JobReport\u current]查询中提取数据,而不是从单个表中提取数据。

多种解决方案。在您的案例中,最简单的是:

报告中有一个“sqlQueryString”属性,您可以通过直接更新字符串来更新该属性。 您还可以在报告中添加一个参数,我们称之为“PAR_yourCombobox”。在VB代码中访问报告时,只需将参数值设置为屏幕上的值。据我记忆所及,它应该是这样的:

yourReport.ParameterFields si.addCurrentValue yourForm.controlsyourCombobox.value


如果你还没有得到这个设置,这里有一个我写的指南就是为了做到这一点:查看这个链接,它似乎接近我想要的,但我有几个问题。1在VS2012中,我没有看到启动.Net应用程序的方法,只有VB、C和其他一些。2在我开始所有这些之后,我仍然不知道如何从Access中的窗体链接字段。net指的是使用.net语言(如VB.net或C)操作的框架。因此,当我说.net应用程序时,你可以使用任何.net语言(如C或VB.net)在VS中创建一个。至于如何在Access组合框中选择记录,然后在VB.net应用程序中过滤CR,这有点复杂。在VB.net窗体上没有combobox有什么原因吗?我想您可以从access编辑access数据库中的datatable,然后将其用作.net CR的记录源。我喜欢这样做,但是,我之所以使用CR,首先是因为我需要的报表查询太复杂,无法访问,如果查询太复杂,无法访问,您可以尝试降低其复杂性。尝试减小别名的大小或完全消除它们。尽量减少所有共同生成最终查询的查询中的文本量。这里有很多选择:虽然我在VBA方面有一些经验,但我在VB方面非常有限,你能再详细解释一下吗?我需要从名为cmbSelector的表单frmHub2中获取组合框,并在运行时将该值移动到我的VB表单上。然后,您需要的值是formsfrmHub2.controlscmbSelector.value或formsfrmHub2.controlscmbSelector.text