// executa uma consulta no banco e retorna um objeto CQuery
        public CQuery select(String isql, String sfields)
        {
            // determina vetor de campos
            String[] fields = sfields.Split(';');

            // cria objeto query
            CQuery query = new CQuery();

            try
            {

                // executa a instrução sem fechar a conexão
                this.execute(isql, false);

                // monta o objeto query
                this._rstRecord = this._cmdCommand.ExecuteReader();

                while (_rstRecord.Read())
                {
                    CRow row = new CRow();

                    for (int i = 0; i < fields.Length; i++)
                    {
                        try
                        {
                            row.addField(fields[i], _rstRecord[fields[i]].ToString());
                        }
                        catch (Exception ex)
                        {
                            row.addField(fields[i], "");
                        }
                    }

                    query.addRow(row);

                }
            }
            catch (Exception ex)
            {
                query = null;
            }
            finally
            {
                // fecha a conexão
                this.closeConnection();
            }

            // retorna a consulta
            return query;
        }
 public void addRow(CRow row)
 {
     _rows.Add(row);
 }
        private String mountFunction(String editFunc, CRow row)
        {
            int i = editFunc.IndexOf("#");

            while (i > 0)
            {
                editFunc = editFunc.Substring(0, i) + row.Field((int)(editFunc[i+1])-48).Value() + editFunc.Substring(i+2);
                i = editFunc.IndexOf("#", i + 1);
            }

            return editFunc;
        }
        public Boolean saveClick()
        {
            if (this._isqlsave.Equals(String.Empty) || this._isqlverifysave.Equals(String.Empty))
            {
                return false;
            }
            else
            {
                String fields = " ";

                for (int i = 0; i < this._fields.Count; i++)
                {

                    // se é campo editável
                    if (this._fields[i].editable())
                    {

                        // verifica se é nulo
                        if (this._fields[i].notnull())
                        {
                            if (this._fields[i].fieldtype() == FieldType.TextBox)
                            {
                                if (((TextBox)this._fields[i].pageelement()).Text.Equals(String.Empty))
                                {
                                    alert("Preencha o campo " + this._fields[i].desc() + "!");
                                    return false;
                                }
                            }
                            else if (this._fields[i].fieldtype() == FieldType.SelectBox)
                            {
                                if (((DropDownList)_fields[i].pageelement()).SelectedValue.Equals(String.Empty))
                                {
                                    alert("Preencha o campo " + this._fields[i].desc() + "!");
                                    return false;
                                }
                            }
                        }

                        // verifica data
                        if (this._fields[i].sqltype() == SQLType.Date && this._fields[i].fieldtype() == FieldType.TextBox)
                        {
                            try
                            {
                                String value = ((TextBox)this._fields[i].pageelement()).Text;
                                DateTime dt = new DateTime(Convert.ToInt32(value.Substring(6, 4)),
                                    Convert.ToInt32(value.Substring(3, 2)), Convert.ToInt32(value.Substring(0, 2)));
                            }
                            catch (Exception ex)
                            {
                                alert("Digite uma data válida (DD/MM/AAAA) para o campo " + this._fields[i].desc() + "!");
                                return false;
                            }
                        }

                        // verifica campo numérico
                        if (this._fields[i].sqltype() == SQLType.Numeric && this._fields[i].fieldtype() == FieldType.TextBox && (i != _identity))
                        {

                            try
                            {
                                String value = ((TextBox)this._fields[i].pageelement()).Text;
                                if (!value.Equals(String.Empty) && this._fields[i].notnull())
                                {
                                    value = value.Replace(",", ".");

                                    Double db = Convert.ToDouble(value);
                                }
                            }
                            catch
                            {
                                alert("Digite um valor numérico válido para o campo " + this._fields[i].desc() + "!");
                                return false;
                            }
                        }

                        String aux;

                        if (this._fields[i].fieldtype() == FieldType.TextBox)
                        {
                            aux = ((TextBox)this._fields[i].pageelement()).Text;
                        }
                        else if (this._fields[i].fieldtype() == FieldType.SelectBox)
                        {
                            aux = ((DropDownList)_fields[i].pageelement()).SelectedValue;
                        }
                        else if (this._fields[i].fieldtype() == FieldType.CheckBox)
                        {
                            aux = ((CheckBox)_fields[i].pageelement()).Checked ? "1" : "0";
                        }
                        else if (this._fields[i].fieldtype() == FieldType.Calendar)
                        {
                            aux = ((Calendar)_fields[i].pageelement()).SelectedDate.Year.ToString() + "-" +
                                ((Calendar)_fields[i].pageelement()).SelectedDate.Month.ToString() + "-" +
                                ((Calendar)_fields[i].pageelement()).SelectedDate.Day.ToString();
                        }
                        else
                        {
                            aux = String.Empty;
                        }

                        fields += ((aux.Equals(String.Empty)&& i != _identity) ? ("NULL,") : ("'" + aux.Replace("'", "''") + "',"));
                    }

                }

                fields = fields.Substring(0, fields.Length - 1);

                CDataBase cdb = new CDataBase();
                CQuery query;

                if (!this._isqlverifysave.Equals("-1"))
                {
                    query = cdb.select(this._isqlverifysave + fields, "P_CHR_MSG_ERRO");
                }
                else
                {
                    query = new CQuery();
                    CRow row = new CRow();
                    row.addField("", "");
                    query.addRow(row);

                }

                if (query.Count() == 0)
                {
                    alert("Houve um erro ao salvar o registro!");
                    this.setPageStatus(StatusPage.OpenUnload);
                    return false;
                }
                else
                {
                    if (!query.Field(0, 0).Equals(String.Empty))
                    {
                        alert("Não foi possível salvar o registro!\\n" + query.Field(0, 0));
                        clearFields();
                        this.setPageStatus(StatusPage.OpenUnload);
                        return false;
                    }
                    else
                    {
                        try
                        {
                            cdb.execute(this._isqlsave + fields);
                            this.setIdentity(cdb);
                            this.setPageStatus(StatusPage.AfterSaveClick);
                        }
                        catch (Exception ex)
                        {
                            alert("Erro ao salvar o registro!\\n" + ex.Message);
                            this.setPageStatus(StatusPage.OpenUnload);
                        }
                    }
                }

                return true;
            }
        }