使用数据集,Microsoft Access数据库的动态Crystal报表

时间:2014-06-04 23:01:27

标签: c# ms-access crystal-reports

我试图从自定义查询中获取报告,访问填充数据集的Microsoft Access数据库,然后填充CrystalReportViwer,但我得到一个包含列名称的空报告。 这是我的联系:

public String ConectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data";
        public OleDbConnection miconexion;
        public Int32 retorna = 0;
        public Int32 conectar(String location){
            try
            {
                ConectionString += @" Source="+location;
                miconexion = new OleDbConnection(ConectionString);
                //Open Database Conexion
                miconexion.Open();
                retorna = 1;
            }
            catch (OleDbException ex){
                retorna = 0;
                MessageBox.Show("Database Error: "+ex.ToString());
            }
            return retorna;
        }
        public void desconectar() { 
            if(miconexion.State == ConnectionState.Open){
                miconexion.Close();
            }
        }

处理sql的方法// --------------------------------- // txt_CustomConsult是包含自定义查询的文本框。

public String ExecuteSQl()
        {
            string sql = null;
            string inSql = null;
            string firstPart = null;
            string LastPart = null;
            int SelectStart = 0;
            int fromStart = 0;
            string[] fields = null;
            string[] sep = { "," };
            int i = 0;
            TextObject MyText;
            inSql = txt_CustomConsult.Text;
            inSql = inSql.ToUpper();
            SelectStart = inSql.IndexOf("SELECT");
            fromStart = inSql.IndexOf("FROM");
            SelectStart = SelectStart + 6;
            firstPart = inSql.Substring(SelectStart, (fromStart - SelectStart));
            LastPart = inSql.Substring(fromStart, inSql.Length - fromStart);
            fields = firstPart.Split(',');
            firstPart = "";
            for (i = 0; i <= fields.Length - 1; i++) {
                if (i > 0)
                {
                    firstPart = firstPart + ", " + fields[i].ToString() + " AS COLUMN" + (i + 1);
                    firstPart.Trim();

                    MyText = (TextObject)ObjRep.ReportDefinition.ReportObjects[i + 1];
                    MyText.Text = fields[i].ToString();

                }
                else {
                    firstPart = firstPart + fields[i].ToString() + " AS COLUMN"+(i+1);
                    firstPart.Trim();

                    MyText = (TextObject)ObjRep.ReportDefinition.ReportObjects[i + 1];
                    MyText.Text = fields[i].ToString();
                }
            }
            sql = "SELECT "+firstPart+" "+LastPart;

            return sql;
        }

// --------------------------------------------- ------

特别报告的方法。 lstbx_Tablas是包含所有表的ListBox, 我得到了所有表格,但报告不起作用。

public void DynamicRep() {
            try {

                //Windows Form where the rpt is located
                ReporteResult mirepres = new ReporteResult();

                //Connection
                conexion miconect = new conexion();
                miconect.conectar(Environment.GetEnvironmentVariable("dbUbicacion"));
                String sql = ExecuteSQl();
                OleDbDataAdapter dscm = new OleDbDataAdapter(sql,miconect.miconexion);
                MisConsultas Dataset1 = new MisConsultas();
                dscm.Fill(Dataset1,lstbx_Tablas.SelectedItem.ToString());
                ObjRep.SetDataSource(Dataset1.Tables[0]);
                mirepres.crv_Reporte.ReportSource = ObjRep;
                mirepres.crv_Reporte.Refresh();
                mirepres.Show();
            }
            catch (Exception ex) { MessageBox.Show(ex.ToString()); }
        }

0 个答案:

没有答案