Crystal Report字段资源管理器中SQL表指定列缺失问题咨询
先给你吃个定心丸:Crystal Reports绝对不会因为某列没有数据就把它从字段资源管理器里藏起来——哪怕这列全是NULL值,只要它在你连接的数据库表中真实存在,就该出现在字段列表里。我处理过好多类似的案例,大概率是以下几个原因导致的,你可以挨个排查:
重新校验数据库连接与表的正确性
有时候我们会下意识以为选对了表,但可能是同名表在不同schema下,或者连接的数据库实例不是目标库。你可以右键点击字段资源管理器里的数据库节点,选择Verify Database,让Crystal重新同步最新的数据库结构;也可以尝试删除当前表,重新添加一次,仔细确认选中的是包含目标列的那张表。检查数据库账号的权限
哪怕你说列没有特殊属性,也有可能连接Crystal的数据库账号没有读取该列的权限。你可以用这个账号在SQL客户端(比如SSMS)里执行SELECT [你的目标列名] FROM [表名],如果报错权限不足,就需要给这个账号添加上对应列的查询权限。看看是不是不小心隐藏了字段
Crystal有个容易被忽略的隐藏字段功能,右键点击字段资源管理器里的目标表节点,选择Show Hidden Fields,看看你的目标列是不是被标记成隐藏了——如果是,取消隐藏就能看到它了。清除Crystal的元数据缓存
Crystal会缓存数据库的结构信息,有时候缓存没更新,导致新添加的列(或者之前没加载完全的列)不显示。你可以关掉所有Crystal窗口,去C:\Users\[你的用户名]\AppData\Local\Temp里找到Crystal相关的缓存文件夹,删掉里面的文件,再重新打开Crystal连接数据库试试。排查列名的特殊字符问题
要是列名里有空格、-、@这类特殊符号,偶尔会导致Crystal加载异常。你可以在数据库里确认列名的拼写,或者试试用SQL表达式的方式添加这列:在数据库专家里给表加个自定义SQL,比如SELECT [目标列名] AS TargetColumn FROM [表名],通过别名的方式把列拉进来。
内容的提问来源于stack exchange,提问作者Jen S

