水晶报表多表查询 数据重复问题,急呀!!

fxy1979 2010-08-29 08:52:11
请教各位高手,我做水晶报表多表查询 数据重复问题,一直未能解决。
代码如下:


//客户业务员显示
main.p_Suppliers.Visible = true; //客户业务员往来帐显示
main.p_Account.Visible = false; //供应商业务员往来帐隐藏
main.p_Suppliers.Dock = DockStyle.Fill;

//绑定列表控件

sql_select_table = string.Format(" select dbill_date,ino_id,cname,ccus_id,cdigest,md,mc,cdept_id,iperiod from GL_Accvouch where ccode='{0}' and cname='{1}' and (GL_Accvouch.iperiod between {2} and {3}) group by dbill_date,ino_id,cname,ccus_id,cdigest,md,mc ,cdept_id,iperiod union select dbill_date,ino_id,cname,ccus_id,cdigest,md,mc,cdept_id,iperiod from GL_Accvouch where ccode='{0}' and cname='{1}' and GL_Accvouch.iperiod=0", cb_CCode.SelectedValue, cb_Person.Text, num_MonthStart.Value.ToString(), num_MonthEnd.Value.ToString());
sql_select_lastyear = string.Format(" select cname,ccus_id,cdigest,cdept_id,iperiod,ccode,cCusName from GL_Accvouch join Customer on Customer.cCusCode=ccus_id where ccode='{0}' and cname='{1}' and GL_Accvouch.iperiod=0 ", cb_CCode.SelectedValue, cb_Person.Text);

sql_select_accass = string.Format("select mb,me,cbegind_c,cendd_c,ccus_id,cdept_id,iperiod,ccode from GL_accass where ccode='{0}' and iperiod between {1} and {2}", cb_CCode.SelectedValue, num_MonthStart.Value.ToString(), num_MonthEnd.Value.ToString());
sql_select_Customer = "select cCusName,cCusCode from Customer";
sql_select_Mc = string.Format("select sum(mc) as a from GL_Accvouch where ccode='{0}' and cname='{1}' and GL_Accvouch.iperiod=0 and ccus_id=@CCus_Id", cb_CCode.SelectedValue, cb_Person.Text);
//构建DataTable
dt = new DataTable("LastYear");
dt.Columns.Add("cname",typeof(string));
dt.Columns.Add("ccus_id", typeof(string));
dt.Columns.Add("mc", typeof(decimal));
dt.Columns.Add("cdigest",typeof(string));
dt.Columns.Add("cdept_id", typeof(string));
dt.Columns.Add("iperiod", typeof(int));
dt.Columns.Add("ccode", typeof(string));
dt.Columns.Add("cCusName", typeof(string));



DataSet ds = new DataSet();
SqlDataReader sdr = SQLHelper.ExecuteReader(SQLHelper.CONN_STRING_NON_DTC, CommandType.Text, sql_select_lastyear, null);
try
{
while (sdr.Read())
{
DataRow dr = dt.NewRow();
dr[0] = sdr[0];
dr[1] = sdr[1];
dr[3] = sdr[2];
dr[4] = sdr[3];
dr[5] = sdr[4];
dr[6] = sdr[5];
dr[7] = sdr[6];
object obj = SQLHelper.ExecuteScalar(CommandType.Text, sql_select_Mc, new SqlParameter("@CCus_Id",sdr[1]));
dr[2] = (obj != null && DBNull.Value != obj) ? obj : 0;
dt.Rows.Add(dr);
}

}
catch
{
}
finally
{
sdr.Close();
SQLHelper.closeConn();
}
//查询余额表
sda = SQLHelper.ExecuteDataAdapter(SQLHelper.CONN_STRING_NON_DTC, CommandType.Text, sql_select_table, null);
sda.Fill(ds, "ClerkA");
//查询客户
sda = SQLHelper.ExecuteDataAdapter(SQLHelper.CONN_STRING_NON_DTC, CommandType.Text, sql_select_Customer, null);
sda.Fill(ds, "Customer");
//查询科目总账
sda = SQLHelper.ExecuteDataAdapter(SQLHelper.CONN_STRING_NON_DTC, CommandType.Text, sql_select_accass, null);
sda.Fill(ds, "GL_accass");
sda.Dispose();
SQLHelper.closeConn();
ds.Tables.Add(dt); //将上年结转余额表添加到数据集
/////////////////////////////////////////添加到报表中/////////////////////////////////////
Clerk_A document = new Clerk_A();
document.Load(AppDomain.CurrentDomain.BaseDirectory + "Clerk_A.rpt");

document.SetDataSource(ds);
main.crv_Clerk_A.ReportSource = document;



//////////////////////////////////////////////////////////////////////////////////////////////////////////
数据集共有四个表:LastYear,ClerkA,Customer,GL_accass 查询结果数据重复。我也设置了表之间的关系了,但是仍然数据重复。
...全文
332 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
niuniuguagua 2013-04-22
  • 打赏
  • 举报
回复
您好,请问你这最后是怎么解决的呢?
jachin1989 2013-04-01
  • 打赏
  • 举报
回复
我也遇到一样问题,dataset里有三张独立的表,链接已经去掉,显示一张表时正常,显示两张以上的时候出现重复了
xw5360 2011-05-19
  • 打赏
  • 举报
回复
解决了吗?
东莞寻香苑 2010-09-02
  • 打赏
  • 举报
回复
最好是把四个表通过Left join连接起来了(即一个SQL语句),直接执行填入DataSet就可以了

Shania2013 2010-09-02
  • 打赏
  • 举报
回复
请问楼主的问题解决了吗?
是怎样解决的?
东莞寻香苑 2010-09-02
  • 打赏
  • 举报
回复
不会吧,这么怪,最近白天上不了网,不然就帮你调试一下
狼王_ 2010-09-02
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 fxy1979 的回复:]
已经设置了联接关系了的。还是有重复的数据!!
[/Quote]
你在数据库中用SQL语句去重不就行了。让后将没有重复的数据PUSH给水晶报表。
fxy1979 2010-09-02
  • 打赏
  • 举报
回复
已经设置了联接关系了的。还是有重复的数据!!
Shania2013 2010-09-02
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 csui2008 的回复:]
最好是把四个表通过Left join连接起来了(即一个SQL语句),直接执行填入DataSet就可以了
[/Quote]
我的是用了left join 但是还是一样的错误,报表上显示的是重复的,但是在数据库中执行就没错
阿双2009 2010-08-29
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 fxy1979 的回复:]
在DataSet中的数据是对的。不重复,但是在水晶报表中显示就是重复的!!
[/Quote]
这边设置了吗?
fxy1979 2010-08-29
  • 打赏
  • 举报
回复
在DataSet中的数据是对的。不重复,但是在水晶报表中显示就是重复的!!
龍月 2010-08-29
  • 打赏
  • 举报
回复
不会 帮顶!!!!!
q107770540 2010-08-29
  • 打赏
  • 举报
回复
设置一LIST 存储唯一标志 如ID等
在将查询出来的数据放入DATASET前
先和LIST内数据比对一下

4,819

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 图表区
社区管理员
  • 图表区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧