0

我是水晶报告的新手。在将数据集的数据绑定到显示两次或三次的水晶报表时。

我正在使用 SQL 2005 和 VS 2008。

我在调试时也检查了 SQL 和数据集,但在数据集中我只有 5 条记录,但在我的水晶中它显示 10 条记录。

以下是我的代码:

ReportDocument doc = new ReportDocument();

sda = new SqlDataAdapter(" SELECT ac_mstr.AC_DESC, TRAN_HDR.DOC_DT, TRAN_DTLS.GL_CODE,    DBCR, AMT FROM dbo.TRAN_DTLS TRAN_DTLS INNER JOIN dbo.AC_MSTR ac_mstr ON (TRAN_DTLS.SUB_CODE=ac_mstr.SUB_CODE) AND (TRAN_DTLS.GL_CODE=ac_mstr.GL_CODE) INNER JOIN dbo.TRAN_HDR TRAN_HDR ON (TRAN_DTLS.TC=TRAN_HDR.TC) AND (TRAN_DTLS.DOC_NO=TRAN_HDR.DOC_NO) where tran_hdr.tc='CAS' and tran_hdr.doc_dt between '2012/01/01' and '2012/12/30'   ORDER BY TRAN_DTLS.GL_CODE", con);

        sda.Fill(ds);      
       doc.Load(Server.MapPath("~/Reports/Acc_sum.rpt"));

      doc.SetDataSource(ds.Tables[0]);
      CrystalReportViewer1.ReportSource = doc;

谁能帮我?

4

2 回答 2

0

Crystal Reports 可以用数据做意想不到的事情。开始调试的好地方(除了在编辑器中打开水晶报告并单击周围)是使用 SQL Server Profiler。可以在http://www.databasejournal.com/features/mssql/article.php/3750161/Introduction-to-SQL-2005-Profiler-Part-1.htm找到更详细的教程。

需要注意的是,虽然 SQL Server 2005 Express 可以与 SQL Server Pro 文件管理器一起使用,但它并不与程序捆绑在一起。

为了您的方便,我附上了一组基本的说明:

-

  1. 打开 SQL Server Profiler:
    • 从开始菜单:\All Programs\Microsoft SQL Server 2005\Performance Tools\SQL Server Profiler。
    • 从 SQL Server Management Studio:Tools\SQL Server Profiler
  2. 按下工具栏最左侧的新跟踪按钮。

  3. 连接到托管数据的 SQL 服务器。

  4. 在 Trace Properties 屏幕上,按运行按钮。
    (它们是“事件选择”选项卡上的许多常用功能,但出于您的目的,默认设置应该没问题。)

  5. 运行你的程序。

使用默认设置,您应该能够看到什么时候访问您的数据库,以及他们使用哪些查询来进行访问。这样您就可以查看您的查询是否正确或是否存在其他问题。

过去,我还(很少)看到水晶报告对数据执行本地连接,导致重复。当这种情况发生在我身上时,我不得不删除大部分报告,甚至创建一个新报告并在每个步骤中对其进行测试,以确定问题出在哪里。

如果您需要其他帮助,请告诉我。

于 2012-09-29T15:49:08.537 回答
0

错误来自您的查询:

    SELECT ac_mstr.AC_DESC, TRAN_HDR.DOC_DT, TRAN_DTLS.GL_CODE,    DBCR, AMT 
FROM dbo.TRAN_DTLS TRAN_DTLS INNER JOIN dbo.AC_MSTR ac_mstr
 ON (TRAN_DTLS.SUB_CODE=ac_mstr.SUB_CODE) AND (TRAN_DTLS.GL_CODE=ac_mstr.GL_CODE) 
INNER JOIN dbo.TRAN_HDR TRAN_HDR ON (TRAN_DTLS.TC=TRAN_HDR.TC) AND (TRAN_DTLS.DOC_NO=TRAN_HDR.DOC_NO) where tran_hdr.tc='CAS' and tran_hdr.doc_dt between '2012/01/01' and '2012/12/30'   ORDER BY TRAN_DTLS.GL_CODE

这会使您的数据出现两次,因此请更改您的查询。

于 2012-09-29T07:35:55.017 回答