在Crystal Report中显示文档的文件路径

时间:2015-12-14 15:56:11

标签: sql-server sql-server-2008 crystal-reports

我有一份列出发票的水晶报告,我希望能够在报告的另一栏中显示发票的文件路径。以下查询允许我根据其唯一ID号搜索文档。然后它显示我搜索的一个文档的文件位置,但是我希望这适用于报告中列出的所有文档。有人可以帮我解决这个问题吗?

    `DECLARE @entryID INT = 35793

SELECT dbo.toc.name AS DocumentName, dbo.doc.pagenum + 1 AS PageNum, dbo.vol.fixpath + '\' + 
SUBSTRING(CONVERT(VARCHAR(8),CONVERT(VARBINARY(4), dbo.doc.storeid),2),1,2) + '\' + 
SUBSTRING(CONVERT(VARCHAR(8),CONVERT(VARBINARY(4), dbo.doc.storeid),2),3,2) + '\' +
SUBSTRING(CONVERT(VARCHAR(8),CONVERT(VARBINARY(4), dbo.doc.storeid),2),5,2) + '\' +
CONVERT(VARCHAR(8),CONVERT(VARBINARY(4), dbo.doc.storeid),2) + '.TIF' AS FullPathAndFilename
FROM dbo.doc  
LEFT JOIN dbo.toc ON dbo.doc.tocid = dbo.toc.tocid
LEFT JOIN dbo.vol ON dbo.toc.vol_id = dbo.vol.vol_id
WHERE dbo.doc.tocid = @entryID
ORDER BY dbo.doc.pagenum`

1 个答案:

答案 0 :(得分:0)

答案取决于您当前在现有Crystal Report中检索数据的方式。

选项A:如果您的报告数据源是“命令”(换句话说,您已在水晶报告中编写了一个SQL语句来检索您需要的数据),那么您将需要修改该命令以通过子查询提取此新信息。因此,例如,如果您当前的报告SQL类似于“选择x。*从foo作为x”,您可能希望它类似于:

select x.*, 
    (SELECT dbo.vol.fixpath + '\' 
     + SUBSTRING(CONVERT(VARCHAR(8),CONVERT(VARBINARY(4), dbo.doc.storeid),2),1,2) + '\' 
     + SUBSTRING(CONVERT(VARCHAR(8),CONVERT(VARBINARY(4), dbo.doc.storeid),2),3,2) + '\' 
     + SUBSTRING(CONVERT(VARCHAR(8),CONVERT(VARBINARY(4), dbo.doc.storeid),2),5,2) + '\' 
     + CONVERT(VARCHAR(8),CONVERT(VARBINARY(4), dbo.doc.storeid),2) 
     + '.TIF' AS FullPathAndFilename
     FROM dbo.doc  
     LEFT JOIN dbo.toc ON dbo.doc.tocid = dbo.toc.tocid
     LEFT JOIN dbo.vol ON dbo.toc.vol_id = dbo.vol.vol_id
     WHERE dbo.doc.tocid = x.tocid   //this line joining the new SQL to all report rows
    )
from foo as x;

选项B:如果您使用连接向导从Crystal中提取数据,那么最好在数据库中创建一个与您提供的SQL相匹配的新视图(减去最后一个) 2行),然后在Crystal join向导中将现有主报表附加到此视图。