【问题标题】:Dynamically change database due to WHERE MySQL Crystal Reports由于 WHERE MySQL Crystal Reports 动态更改数据库
【发布时间】:2013-07-22 15:48:24
【问题描述】:

我正在使用 .NET 4.5 进行编程,VS 2012 使用 CrystalReports 和 MySQL(最后一个 ^^)。

我有 3 个或更多名为“rp31_bla_2012_bla”或“rp31_bla_2013_bla”的表或...

想象一下你有一张桌子:

- 姓名 - 年龄 - 工作 - 年份 -

  • 罗伯特 - 45 岁 - 医生 - 2001 年
  • 罗伯特 - 45 - 自制 - 2002 年
  • 罗伯特 - 45 - 极客 - 2006 年
  • 罗伯特 - 45 - 炊具 - 2009 年
  • 罗伯特 - 45 - (null) - 2013
  • Nadège - 21 - CallGirl - 2001
  • Nadège - 21 - (null) - 2002
  • Nadège - 21 - CallGirl - 2008
  • Nadège - 21 - 家 - 2008

现在我有一个带有两个文本框的 WinForm,如果用户写“罗伯特”和“2013”​​,我必须使用"rp31_bla_***2013***_bla" WHERE Name = Robert 进行报告。 有可能吗?
我应该创建哪种类型的报告?
如何动态更改查询?

【问题讨论】:

  • 如果所有年度数据表都相同,您要么需要复制其中一个的结构以制作您自己的报表绑定的数据表,然后通过后面的 WinForm 代码填写,要么创建一个数据表,它将仅包含您需要的报表所绑定的报表的信息,您可以通过后面的 WinForm 代码填充它。你明白我在说什么吗?
  • 嗨,Ally,感谢您的回答!是的,我明白你在说什么,但是,我可以有 5 个表(2009、2010、2011、2012、2013),共 5000 行和 10 列,所以我认为如果用户想从所有这些表中获取信息,在另一个表中复制我需要的东西真的很慢,不是吗?如果我们阅读Lan的答案,他提出了一个解决方案,我不知道哪个更快=/

标签: mysql visual-studio-2012 crystal-reports


【解决方案1】:

您可以使用 union 合并 3 个表并按名称过滤

选择 * 从 ( 选择 ..., 2012 作为 rp31_bla_2012_bla 的年份 联盟 选择 ..., 2013 作为 rp31_bla_2013_bla 的年份 联盟 选择 ..., 2014 作为 rp31_bla_2014_bla 的年份 ) 吨 WHERE t.Year =2013 和 t.Name ='Robert'

由于数据源永远不会改变,因此您无需切换表。 这种方法会比较慢,因为您将始终查询 3 个表

另一种选择是在 Crystal 报表中使用命令并创建将使用 exec 执行的动态查询 - 然后您将只能查询一个表,但您需要处理名称中的特殊字符(例如'%?)

【讨论】:

  • 嗨兰,也感谢您的回答。我明白你在说什么,但我不会总是查询这 3 个表(即使我只想要其中的 1 个或 2 个)。我可以这样做: List yearTable = 用户写的年份; foreach (String year in yearTable) { 在这里我用我想要的所有日期以及我想要的所有文件构造查询 =) } 但是更快的选择是什么? Ally 解决方案还是您的解决方案? :)
猜你喜欢
  • 2011-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多