none
Soma de uma coluna no BD filtrando por datas. RRS feed

  • Pergunta

  • Buenas Galera estou com um probleminha. Tenho um sistema de controle financeiro tenho cadastros  e lançamentos.

    Tem uma parte onde eu pego os valores lançados e somo em um determinado período tem uma coluna chamada VPDECIMA, Data_Pag, EntradaDeb ou Cred.

    A intenção é separar o que é debito e credito somar e jogar para label Credito e Debito, eu fiz assim:

            private void button1_Click(object sender, EventArgs e)
                 {
                SqlConnection conectar = new SqlConnection(@"Data Source=.\MSQLExpress;Initial Catalog=Login;Integrated Security=True");
                conectar.Open();
                SqlCommand comandos = conectar.CreateCommand();
                comandos.CommandText = ("select VPDECIMAL FROM LANÇAMENTO WHERE DEB_CRED = Credito, Data_Pag BETWEEN '" + Convert.ToDateTime(Date1.Text) + "' and Data_Pag '" + Convert.ToDateTime(Date2.Text) + "'");
                DataTable dt = new DataTable();
                SqlDataAdapter adapter = new SqlDataAdapter();
                adapter.SelectCommand = comandos;
                adapter.Fill(dt);
                object ob = dt.Compute("Sum(VPDECIMAL)", "");
                decimal dc = new decimal();
                dc = Convert.ToDecimal(ob);
                label3.Text = (dc.ToString("C"));
    
            }

    Só que está me ocorrendo erro na hora da execução syntax Near ','.

    Já quebrei a cabeça tentando fazer isso funcionar.

    Eu tenho uma classe chamada sisLAN onde executo o metodo mas não achei jeito de fazer o metodo lá e jogar numa string e no form fazer seleção de datas e jogar no meu form.

    Esse sistema de pesquisa está funcionando. No meu form:

    sisLAN obj = new sisLAN();
                string sql;
                if (rNameFat.Checked)
                {
                    sql = "SELECT [ID_LANÇAMENTO] AS [Codigo], [DEB_CRED] AS [Tipo de Baixa], [COD_FOR_CLI], [FORNEC_CLIENTE], [CNPJ], [IE] AS [Insc. Estadual], [DP], [FP] AS [Forma de Pag.], [Q_PARC] AS [Qt de Parc], [NF] AS [Nota Fiscal], [VT] AS [Valor Total],  [DATA_EMISSAO] AS [Data Emisão], [VP] AS [Valor da Parc.], [N_PARC] AS [N° da Parc.], [DATA_PAG] AS [Data Pag.], [OBS] as [Obs] FROM LANÇAMENTO WHERE NF LIKE @VALOR";
                    dgpesqFat.DataSource = obj.Pesquisar(sql, "%" + tb_pesqFat.Text + "%", DateTime.Today, DateTime.Today);
                }
                else
                {
                    sql = "SELECT [ID_LANÇAMENTO] AS [Codigo], [DEB_CRED] AS [Tipo de Baixa], [COD_FOR_CLI], [FORNEC_CLIENTE], [CNPJ], [IE] AS [Insc. Estadual], [DP], [FP] AS [Forma de Pag.], [Q_PARC] AS [Qt de Parc], [NF] AS [Nota Fiscal], [VT] AS [Valor Total],  [DATA_EMISSAO] AS [Data Emisão], [VP] AS [Valor da Parc.], [N_PARC] AS [N° da Parc.], [DATA_PAG] AS [Data Pag.], [OBS] as [Obs] FROM LANÇAMENTO WHERE DATA_PAG BETWEEN @Date1 AND @Date2";
                    dgpesqFat.DataSource = obj.Pesquisar(sql, String.Empty, DateTime.Parse(dt_inicio.Text), DateTime.Parse(dt_final.Text));
                }

    Na minha Classe:

    public DataTable Pesquisar(string sql, string param, DateTime paramD1, DateTime paramD2)//Pesquisar Contas a Pagar
              {
                  this.vsql = sql;
    
                  SqlCommand objcmd = null;
    
                  if (this.conectar())
                  {
                      try
                      {
                          objcmd = new SqlCommand(vsql, objCon);
                          objcmd.Parameters.Add(new SqlParameter("VALOR", param));
                          objcmd.Parameters.AddWithValue("@Date1", paramD1);
                          objcmd.Parameters.AddWithValue("@Date2", paramD2);
                         
                          SqlDataAdapter adp = new SqlDataAdapter(objcmd);
                          DataTable dt = new DataTable();
                          adp.Fill(dt);
    
                          return dt;
                      }
                      catch (SqlException sqlerror)
                      {
                          throw sqlerror;
                      }
                      finally
                      {
                          this.desconectar();
                      }
                  }
                  else
                  {
                      return null;
                  }
              }

    Queria manter esse sistema mais eu não consigo.

    domingo, 13 de janeiro de 2013 15:40

Respostas

  • Olá Fernando

    Seu problema esta no Where, você colocou uma "," e no where usamos o "AND" e faltou um " ' " no filtro com texto.

    comandos.CommandText = ("select VPDECIMAL FROM LANÇAMENTO WHERE DEB_CRED = Credito, Data_Pag BETWEEN '" + Convert.ToDateTime(Da

    O correto seria

    comandos.CommandText = ("select VPDECIMAL FROM LANÇAMENTO WHERE DEB_CRED = 'Credito' AND Data_Pag BETWEEN '" + Convert.ToDateTime(Date1.Text) + "' and Data_Pag '" + Convert.ToDateTime(Date2.Text) + "'");


    Att.
    Marcelo Fernandes

    MCP, MCDBA, MCSA, MCTS.
    Se útil, classifique!!!
    Me siga no twitter: @marcelodba


    segunda-feira, 14 de janeiro de 2013 09:28
    Moderador