Usuário com melhor resposta
Retorno de Consulta entre datas e soma da coluna do datagridview

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 SubO 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 SubSe tiver alguem que possa me dar uma ajuda para resolver agradeço demais.
Muito Obrigado.
PabloSousa
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.
- Marcado como Resposta Robson William SilvaModerator terça-feira, 28 de março de 2017 12:16
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.
- Sugerido como Resposta Robson William SilvaModerator segunda-feira, 27 de março de 2017 13:32
-
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.ValueAgora 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
-
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.
-
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 Submas 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
-
"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.
-
-
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.
- Marcado como Resposta Robson William SilvaModerator terça-feira, 28 de março de 2017 12:16
-