none
Retorno de Consulta entre datas e soma da coluna do datagridview RRS feed

  • Pergunta

  • Boa Noite Pessoal!!!

    Estou com 2 problemas, vou explicar.

    Quando faço a consulta entre datas, por exemplo quero do dia 25 ate o dia 25, a consulta retorna nada, se coloca de 24 a 25 se não tiver cadastro do dia 24 retorna todos do dia 25, esse e um problema, segue codigo da consulta abaixo.

    Private Sub PesquisaData()
            Dim DtaInicial As String
            Dim DtaFinal As String
            Dim tabela As New DataTable
            Dim strsql As String

            DtaInicial = txtdtainicial.Value.ToString
            DtaFinal = txtdtafinal.Value.ToString

            strsql = "Select * from TbContasReceber Where Vencimento between @DtaInicial And @DtaFinal order by Vencimento"

            Dim con As New OleDbConnection
            Dim cmd As New OleDbCommand
            Try
                con.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\BbDadosControlePessoalContas\BdContasReceber.accdb"
                con.Open()
                cmd.Connection = con
                cmd.Parameters.AddWithValue("@DtaInicial", DtaInicial)
                cmd.Parameters.AddWithValue("@DtaFinal", DtaFinal)

                cmd.CommandText = strsql

                Using reader As OleDbDataReader = cmd.ExecuteReader()
                    tabela.Load(reader)
                    dgvcontasreceber.DataSource = tabela
                End Using
            Catch ex As Exception
                MessageBox.Show("Erro : " & ex.Message, "Dados Não Existe, Favor verificar Datas!!!")
            Finally
                con.Close()
            End Try
    End Sub

    O outro problema e o seguinte, quando retorna essa consulta de datas quero somar a coluna valor e colocar em um textbox, so que quando soma ele soma todos os cadastros que tem no dataset, nao as linhas da consulta, segue codigo para somar a coluna.

    Private Sub SomarValor()
            Dim Valor As String = Me.DataSetBdContasReceber.TbContasReceber.Compute("SUM(ValorDocumento)", Nothing).ToString
            Me.txttotalreceber.Text = CDbl(Valor)
            Me.txttotalreceber.Text = Convert.ToDouble(txttotalreceber.Text).ToString("C")
    End Sub

    Se tiver alguem que possa me dar uma ajuda para resolver agradeço demais.

    Muito Obrigado.


    PabloSousa

    segunda-feira, 27 de março de 2017 01:21

Respostas

  • Bom dia,

    Eu não sei como está o restante do seu código, mas parece que falta atualizar seu Dataset com a última consulta, assim, seu código original funcionaria, como comentei antes... ele não está incorreto...

    Tente utilizar seu datatable original (tabela) para fazer a soma, desta forma:

    Dim Valor As String = tabela.Compute("SUM(ValorDocumento)", Nothing).ToString
    Att,


    Fabio Rosa.

    terça-feira, 28 de março de 2017 10:20

Todas as Respostas

  • Olá,

    Sobre o primeiro problema, os teus controles  txtdtaInicial e txtdtaFinal  são controles de datas, como DatePicker? Caso sim, quando você transforma em string, com o ToString() sem especificar o formato, o .NET transforma com as horas junto.. e então a pesquisa no banco vai com horas...  Sugiro colocar o ToString("dd/MM/yyyy") ou no formato que está seu banco.

    No segundo problema, você precisa definir uma condição para o SUM... Sem condição ele soma tudo do Dataset... Exempl ode Condição:

    sumObject = table.Compute("Sum(Total)", "EmpID = 5");

    Veja que acima, está somando a coluna Total somente quando a coluna EmpID é igual a 5.

    Att,


    Fabio Rosa.

    segunda-feira, 27 de março de 2017 11:12
  • Bom Dia Fabio!!!

    Obrigado pela força, na parte da consulta por data deu certo tirei o tostring e deixei assim e deu certo.

     DtaInicial = txtdtainicial.Value
     DtaFinal = txtdtafinal.Value

    Agora desculpe mas não entendi muito bem, somente quando a coluna EmpID e igual a 5, como assim pode me explicar melhor, fazendo um favor.

    Obrigado.


    PabloSousa

    segunda-feira, 27 de março de 2017 13:37
  • Olá,

    OK. Neste seu código:

    Me.DataSetBdContasReceber.TbContasReceber.Compute("SUM(ValorDocumento)", Nothing).ToString
            Me.txttotalreceber.Text = CDbl(Valor)
            Me.txttotalreceber.Text = Convert.ToDouble(txttotalreceber.Text).ToString("C")
    End Sub

    Você está chamando o método Compute do Dataset, apenas com o SUM, sem nenhuma condição.

    Inicialmente, se sua consulta anterior está correta, no seu Dataset já devem ter apenas os registros de sua consulta, então deveria funcionar...  Porém, quando você precisar fazer um SUM com uma condição, pode usar como comentei no código acima, colocando após o comando 'SUM(ValorDocumento)' a condição para filtrar os registros do Dataset...

    Consegui explicar?

    Att,


    Fabio Rosa.

    segunda-feira, 27 de março de 2017 14:09
  • Bom Dia Fabio!!!

    Não estou conseguindo incluir aquela linha de codigo no meu codigo esta dando erro,

    estou fazendo assim,

    Private Sub SomaColuna()
            Dim Valor As String = Me.DataSetBdContasReceber.TbContasReceber.Compute("SUM(ValorDocumento)", sumObject = table.Compute("Sum(Total)", "EmpID = 5"))
            Me.txttotalreceber.Text = CDbl(Valor)
            Me.txttotalreceber.Text = Convert.ToDouble(txttotalreceber.Text).ToString("C")
    End Sub

    mas não funciona.

    Mas fabio não entendi aquele 5 porque 5, tem alguma coisa a ver com as linhas do datagridview???

    Desculpe mas sou novo em vb.net então tem hora que patino.

    Obrigado.


    PabloSousa

    segunda-feira, 27 de março de 2017 14:17
  • "EmpId = 5" é só um exemplo de condição...

    EmpId é o nome do campo que vc quer filtrar, e 5 é o valor filtrado.

    Não adicione o código que eu sugeri... foi só um exemplo para você entender a lógica do comando... agora você precisa aplicar no seu contexto, colocando o nome da coluna do seu dataset que quer filtrar e com o valor que quer filtrar...

    Att,


    Fabio Rosa.

    segunda-feira, 27 de março de 2017 14:31
  • Boa Tarde Fabio!!!

    Fabio tentei de todas as formas que achava que poderia dar certo, mas não consegui, se puder passar um exemplo do codigo, ou onde tenho que alterar nesse meu codigo.

    Desde já agradeço, muito obrigado.


    PabloSousa

    segunda-feira, 27 de março de 2017 17:41
  • Bom dia,

    Eu não sei como está o restante do seu código, mas parece que falta atualizar seu Dataset com a última consulta, assim, seu código original funcionaria, como comentei antes... ele não está incorreto...

    Tente utilizar seu datatable original (tabela) para fazer a soma, desta forma:

    Dim Valor As String = tabela.Compute("SUM(ValorDocumento)", Nothing).ToString
    Att,


    Fabio Rosa.

    terça-feira, 28 de março de 2017 10:20
  • Bom Dia Fabio Rosa!!!

    Fabio lhe agradeço muito pela ajuda, deu tudo certo, agora esta do jeito que precisava o sistema.

    Muito Obrigado, Deus lhe Abençõe!!!

    Bom Dia!!!


    PabloSousa

    terça-feira, 28 de março de 2017 11:21