首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

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

2013-04-02 
水晶报表多表查询 数据重复问题,急呀!!请教各位高手,我做水晶报表多表查询 数据重复问题,一直未能解决。代

水晶报表多表查询 数据重复问题,急呀!!
请教各位高手,我做水晶报表多表查询 数据重复问题,一直未能解决。
代码如下:


 //客户业务员显示
                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 查询结果数据重复。我也设置了表之间的关系了,但是仍然数据重复。
[解决办法]
设置一LIST 存储唯一标志 如ID等
在将查询出来的数据放入DATASET前
先和LIST内数据比对一下
[解决办法]

引用:
在DataSet中的数据是对的。不重复,但是在水晶报表中显示就是重复的!!


这边设置了吗?
水晶报表多表查询 数据重复有关问题,呀!
[解决办法]
最好是把四个表通过Left join连接起来了(即一个SQL语句),直接执行填入DataSet就可以了


[解决办法]
引用:
已经设置了联接关系了的。还是有重复的数据!!

你在数据库中用SQL语句去重不就行了。让后将没有重复的数据PUSH给水晶报表。
[解决办法]
不会吧,这么怪,最近白天上不了网,不然就帮你调试一下

热点排行