复杂水晶报表帮助——数据库字段值中的分号

Posted

技术标签:

【中文标题】复杂水晶报表帮助——数据库字段值中的分号【英文标题】:Complicated crystal report help - Semicolon in the database field value 【发布时间】:2012-07-03 18:49:58 【问题描述】:

我有一个名为 Firstname 和 Categories 的数据库列。

FirstName  | Categories

Mike       | Blue; Green ; Red
Peter      | Green; Red
Paul       | Red; Blue

我想生成这种格式的报告

**Blue :** 
Mike
Paul

**Green:**
Mike
Peter

**Red:**
Peter 
Paul

问题是我无法更改访问数据库列的值,它必须有一个分号来分隔值。我有 1000 多条记录和 30 多个类别。

我怎样才能做到这一点?我正在使用水晶报表,我不是专业用户,但我很容易学习东西。

【问题讨论】:

为什么要在一个字段中存储多个值?这不是好的设计。 是的,我知道,但数据来自其他来源,所以我别无选择,只能按原样使用它:( 您是否有权向 Access 数据库添加新视图? 改变你的数据库设计,创建一个触发器,在接收到一行时拆分字符串并将值分开行/列/表 嗨,感谢您的意见...这就是我的想法。我不知道触发器是什么,我计划现在手动执行所有操作-通过循环遍历所有记录,将类别名称及其各自的成员名称添加到 datagridview 并将 datagridview 传递给水晶来分离所有类别名称报告 - 听起来很复杂,但我认为这是可行的。 【参考方案1】:

我会说你很可能不走运。该数据的设计非常糟糕,并且没有简单的方法可以将这些数据取出。

您的选择是:

让其他来源以可解析的格式发送数据,并将 Crystal Reports 指向那个,或者... 在 Access 中创建一个新的规范化表,在 Access 中使用 VBA 爬取当前表并填充新表,然后将 Crystal Reports 指向新表。

选项 #2 的缺点是您可能必须在运行 Crystal Report 之前重新填充新表。

【讨论】:

【参考方案2】:

这很容易实现,尽管有 30 个类别的可能性它变得丑陋。如果一个类别的全名是另一个类别的子字符串(例如:Green 和 YellowGreen),那就更难看了

    制作一个 Crystal 报表,选择数据库,但选择了添加命令而不是拖动表格。 像这样插入“SQL”:

.

SELECT 'Blue' As Category,*
FROM Customers
WHERE Categories LIKE '*Blue*'
UNION ALL
SELECT 'Green' As Category,*
FROM Customers
WHERE Categories LIKE '*Green*'
UNION ALL
SELECT 'Red' As Category,*
FROM Customers
WHERE Categories LIKE '*Red*'

然后在 Report > Group Expert 下按 Command.Category 分组

【讨论】:

您好,感谢您的意见。问题是类别未知。他们可以设置任何值,所以我现在计划手动执行所有操作 - 即通过循环遍历所有记录来分隔所有类别名称,将类别名称及其各自的成员名称添加到 datagridview 并将 datagridview 传递给水晶报告 - 听起来很复杂但这就是我认为可行的方法。

以上是关于复杂水晶报表帮助——数据库字段值中的分号的主要内容,如果未能解决你的问题,请参考以下文章

Winform中怎么使用水晶报表?

如何将值字段拆分为水晶报表中的更多字段?

FineReport报表和水晶报表的比较

谁能帮忙弄个水晶报表显示条码CODE128的

如何在水晶报表中计算字段?

Crystal报表中的动态列