none
Consulta sql entre Datas, e cliente na mesma consulta.

    Pergunta

  • Boa Tarde pessoal,

    Preciso de uma ajuda para fazer uma consulta sql, tenho numa consulta por periodo, data inicial e data final, funcionando blz, mas gostaria de colocar na mesma consulta por periodo e por cliente.

    segue abaixo cogido para consulta de periodo que esta funcionando.

     strsql = "Select * from XmlNfeProduto Where DtaEmissão between @DtaInicial And @DtaFinal order by DtaEmissão"

    Ai tentei fazer assim para colocar cliente tambem na consuta, mas não deu, segue abaixo codigo.

     'strsql = "Select * from XmlNfeProduto Where RazãoSocial=@NomeCliente and DtaEmissão between @DtaInicial And @DtaFinal order by DtaEmissão"

    Agora o codigo do botão,

     Private Sub btnconsultaperiodo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnconsultaperiodo.Click
            Dim DtaInicial As String
            Dim DtaFinal As String
            Dim tabela As New DataTable
            Dim Cliente As String
            Dim strsql As String
    
            DtaInicial = txtdtainicial.Text.ToString
            DtaFinal = txtdtafinal.Text.ToString
            Cliente = Me.txtcliente.Text
    
          
            'strsql = "Select * from XmlNfeProduto Where RazãoSocial=@NomeCliente and DtaEmissão between @DtaInicial And @DtaFinal order by DtaEmissão"
            strsql = "Select * from XmlNfeProduto Where DtaEmissão between @DtaInicial And @DtaFinal order by DtaEmissão"
    
            Dim con As New OleDbConnection
            Dim cmd As New OleDbCommand
            Try
                con.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Central-BancoDados\BdControleXml.accdb"     'Source=\\Servidor-king\c\Central-BancoDados\BdControleXml.accdb"
                con.Open()
                cmd.Connection = con
                cmd.Parameters.AddWithValue("@DtaInicial", DtaInicial)
                cmd.Parameters.AddWithValue("@DtaFinal", DtaFinal)
                cmd.Parameters.AddWithValue("@NomeCliente", Cliente)
                cmd.CommandText = strsql
    
                Using reader As OleDbDataReader = cmd.ExecuteReader()
                    tabela.Load(reader)
                    XmlNfeProdutoBindingSource.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
    
    
            Dim SomaColunaQuantidade As String = tabela.Compute("SUM(Quantidade)", Nothing).ToString
            Me.txttotalqntd.Text = Convert.ToInt32(SomaColunaQuantidade)
    
            Dim SomaColunaValorProduto As String = tabela.Compute("SUM(ValorProduto)", Nothing).ToString
            Me.txttotalproduto.Text = FormatCurrency(SomaColunaValorProduto)
    
            Me.ReportViewerVendas.RefreshReport()
    
            Me.txttotalregistro.Text = Me.dgvvendas.RowCount - 1
    
        End Sub

    Se tiver alguem que possa dar um exemplo de como fazer funcionar essa consulta, por periodo e cliente na mesma consulta agradeço demais.

    Desde já muito obrigado.

    Pablo Sousa.


    PabloSousa

    sábado, 5 de agosto de 2017 17:56

Respostas

  • Top 20 , serve para limitar até quantos registros vc quer trazer, ou seja se existirem 1.milhão de registros na tabela que satisfaçam os criterios , vc limita que s´s tragam 20. 

    agora para começar a aprender eu sugiro um treinamento básico de T-SQL 

    Treinamento Básico de T-SQL

    Wesley Neves - Brasilia-DF

     
    wesley.si.neves@gmail.com
    MTA-SQL Server
    MTA- Web Development
    Analista Desenvolvedor.NET
    Pós-Graduando em Banco de Dados 
    "Se a resposta for útil ou ajudar ,não esqueça de marcar"



    Wesley Neves

    segunda-feira, 14 de agosto de 2017 11:19

Todas as Respostas

  • Se na tabela existir os dados para o Nome do cliente especificado ,não faz sentido não trazer ,

    pelo que notei no seu código postado .

    'strsql = "Select * from XmlNfeProduto Where RazãoSocial=@NomeCliente and DtaEmissão between @DtaInicial And @DtaFinal order by DtaEmissão"
            strsql = "Select * from XmlNfeProduto Where DtaEmissão between @DtaInicial And @DtaFinal order by DtaEmissão"

    tente comentar  o segundo select, acredito que um esteja sobrepondo o outro

    deixe apenas esse 

    'strsql = "Select * from XmlNfeProduto Where RazãoSocial=@NomeCliente and DtaEmissão between @DtaInicial And @DtaFinal order by DtaEmissão"

    alem disso poste o seguinte resultado

    SELECT  TOP 20 RazãoSocial,DtaEmissão
    FROM    XmlNfeProduto
    --WHERE   RazãoSocial = @NomeCliente
    --        AND DtaEmissão BETWEEN @DtaInicial AND @DtaFinal
    ORDER BY DtaEmissão,RazãoSocial;

    Wesley Neves - Brasilia-DF

     
    wesley.si.neves@gmail.com
    MTA-SQL Server
    MTA- Web Development
    Analista Desenvolvedor.NET
    Pós-Graduando em Banco de Dados 
    "Se a resposta for útil ou ajudar ,não esqueça de marcar"




    Wesley Neves



    Wesley Neves

    segunda-feira, 7 de agosto de 2017 11:21
  • Boa Tarde Wesley,

    Obrigado pela força, sobre as duas consultas esqueci de marcar a certa e desmarcar a outra, somente, mas no sistema coloquei uma de cada vez para testar, foi um descuido desmarquei a errada.

    Vou fazer o teste nesse exemplo que você mandou, depois coloco a resposta.

    Desde já agradeço demais ajuda, muito obrigado.

    Pablo Sousa.


    PabloSousa

    segunda-feira, 7 de agosto de 2017 19:35
  • Boa Noite Wesley,

    Fiz o teste aqui com seu exemplo e também não retorna nada, segue abaixo como ficou a consulta.

    Private Sub btnconsultaperiodo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnconsultaperiodo.Click
            Dim DtaInicial As String
            Dim DtaFinal As String
            Dim tabela As New DataTable
            Dim Cliente As String
            Dim strsql As String
    
            DtaInicial = txtdtainicial.Text.ToString
            DtaFinal = txtdtafinal.Text.ToString
            Cliente = Me.txtcliente.Text
    
            ' essa consulta e por data
            'strsql = "Select * from XmlNfeProduto Where DtaEmissão between @DtaInicial And @DtaFinal order by DtaEmissão"
    
            ' essa consulta e por data e cliente
            strsql = "Select * from XmlNfeProduto Where RazãoSocial = @NomeCliente and DtaEmissão between @DtaInicial And @DtaFinal order by DtaEmissão"
    
    
            Dim con As New OleDbConnection
            Dim cmd As New OleDbCommand
            Try
                con.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Central-BancoDados\BdControleXml.accdb"     'Source=\\Servidor-king\c\Central-BancoDados\BdControleXml.accdb"
                con.Open()
                cmd.Connection = con
                cmd.Parameters.AddWithValue("@DtaInicial", DtaInicial)
                cmd.Parameters.AddWithValue("@DtaFinal", DtaFinal)
                cmd.Parameters.AddWithValue("@NomeCliente", Cliente)
                cmd.CommandText = strsql
    
                Using reader As OleDbDataReader = cmd.ExecuteReader()
                    tabela.Load(reader)
                    XmlNfeProdutoBindingSource.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
    
    
            Dim SomaColunaQuantidade As String = tabela.Compute("SUM(Quantidade)", Nothing).ToString
            Me.txttotalqntd.Text = Convert.ToInt32(SomaColunaQuantidade)
    
            Dim SomaColunaValorProduto As String = tabela.Compute("SUM(ValorProduto)", Nothing).ToString
            Me.txttotalproduto.Text = FormatCurrency(SomaColunaValorProduto)
    
            Me.ReportViewerVendas.RefreshReport()
    
            Me.txttotalregistro.Text = Me.dgvvendas.RowCount - 1
    
        End Sub

    Wesley o que será que acontece que não retorna dados???

    Desde já agradeço, muito obrigado.

    Pablo Sousa.


    PabloSousa

    terça-feira, 8 de agosto de 2017 00:01
  • Boa tarde, Pablo_1977. Tudo bem?

    Conseguiu resolver essa questão?

    Se ainda não, pode explicar melhor o que ainda precisa.

    Atenciosamente,

    Filipe B de Castro

    Esse conteúdo é fornecido sem garantias de qualquer tipo, seja expressa ou implícita

    MSDN Community Support

    Por favor, lembre-se de Marcar como Resposta as postagens que resolveram o seu problema. Essa é uma maneira comum de reconhecer aqueles que o ajudaram e fazer com que seja mais fácil para os outros visitantes encontrarem a resolução mais tarde.

    sexta-feira, 11 de agosto de 2017 20:27
    Moderador
  • Te pedi para rodar esse Select por favor

    SELECT  TOP 20 RazãoSocial,DtaEmissão
    FROM    XmlNfeProduto
    --WHERE   RazãoSocial = @NomeCliente
    --        AND DtaEmissão BETWEEN @DtaInicial AND @DtaFinal
    ORDER BY DtaEmissão,RazãoSocial;

    wesley.si.neves@gmail.com
    MTA-SQL Server
    MTA- Web Development
    Analista Desenvolvedor.NET
    Pós-Graduando em Banco de Dados 
    "Se a resposta for útil ou ajudar ,não esqueça de marcar"


    Wesley Neves

    sábado, 12 de agosto de 2017 13:24
  • Boa Tarde Filipe,

    Filipe fiz os testes com os exemplos colocados mas não aparece resultado nenhum na consulta.

    vou colocar o codigo novamente.

    Estou tentando fazer a consulta com esse codigo abaixo.

    Private Sub btnconsultaperiodo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnconsultaperiodo.Click
            Dim DtaInicial As String
            Dim DtaFinal As String
            Dim tabela As New DataTable
            Dim Cliente As String
            Dim strsql As String
    
            DtaInicial = txtdtainicial.Text.ToString
            DtaFinal = txtdtafinal.Text.ToString
            Cliente = Me.txtcliente.Text
    
            ' essa consulta e por data e cliente
            'strsql = "Select * from XmlNfeProduto Where RazãoSocial = @NomeCliente and DtaEmissão between @DtaInicial And @DtaFinal order by DtaEmissão, RazãoSocial"
    
          
            Dim con As New OleDbConnection
            Dim cmd As New OleDbCommand
            Try
                con.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Central-BancoDados\BdControleXml.accdb"     'Source=\\Servidor-king\c\Central-BancoDados\BdControleXml.accdb"
                con.Open()
                cmd.Connection = con
                cmd.Parameters.AddWithValue("@DtaInicial", DtaInicial)
                cmd.Parameters.AddWithValue("@DtaFinal", DtaFinal)
                cmd.Parameters.AddWithValue("@NomeCliente", Cliente)
                cmd.CommandText = strsql
    
                Using reader As OleDbDataReader = cmd.ExecuteReader()
                    tabela.Load(reader)
                    Me.dgvvendas.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
    
    
            Dim SomaColunaQuantidade As String = tabela.Compute("SUM(Quantidade)", Nothing).ToString
            Me.txttotalqntd.Text = Convert.ToInt32(SomaColunaQuantidade)
    
            Dim SomaColunaValorProduto As String = tabela.Compute("SUM(ValorProduto)", Nothing).ToString
            Me.txttotalproduto.Text = FormatCurrency(SomaColunaValorProduto)
    
            Me.ReportViewerVendas.RefreshReport()
    
            Me.txttotalregistro.Text = Me.dgvvendas.RowCount - 1
    
        End Sub

    Desde já agradeço, fico no aguardo obrigado.


    PabloSousa

    domingo, 13 de agosto de 2017 19:04
  • Boa Tarde Wesley,

    Fiz o teste com esse exemplo que você colocou acima, não da erro nenhum mas não aparece retorno nenhum da consulta, segue abaixo foto do grid com os dados e do exemplo que você colocou de consulta mas não retorna nada.

    Private Sub btnconsultaperiodo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnconsultaperiodo.Click
            Dim DtaInicial As String
            Dim DtaFinal As String
            Dim tabela As New DataTable
            Dim Cliente As String
            Dim strsql As String
    
            DtaInicial = txtdtainicial.Text.ToString
            DtaFinal = txtdtafinal.Text.ToString
            Cliente = Me.txtcliente.Text
            
            ' teste
            strsql = "SELECT Top 20 RazãoSocial,DtaEmissão FROM XmlNfeProduto WHERE RazãoSocial=@NomeCliente AND DtaEmissão BETWEEN @DtaInicial AND @DtaFinal ORDER BY DtaEmissão,RazãoSocial"
    
            Dim con As New OleDbConnection
            Dim cmd As New OleDbCommand
            Try
                con.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Central-BancoDados\BdControleXml.accdb"     'Source=\\Servidor-king\c\Central-BancoDados\BdControleXml.accdb"
                con.Open()
                cmd.Connection = con
                cmd.Parameters.AddWithValue("@DtaInicial", DtaInicial)
                cmd.Parameters.AddWithValue("@DtaFinal", DtaFinal)
                cmd.Parameters.AddWithValue("@NomeCliente", Cliente)
                cmd.CommandText = strsql
    
                Using reader As OleDbDataReader = cmd.ExecuteReader()
                    tabela.Load(reader)
                    Me.dgvvendas.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

    Desse jeito nao funciona, segue tela do grid abaixo,

    Como você pode ver, tem os dados para ser filtrado na data emissão e data de saida, e os cliente tambem existe, por será que não retorna a consulta???

    Desde já agradeço, muito obrigado.


    PabloSousa

    domingo, 13 de agosto de 2017 19:31
  • Boa Tarde Wesley,

    So para questão de entender para que serve aquele top 20 ali no começo da instrução sql, me desculpa mas não entendo muito disso e gostaria de saber o significado disso.

    Desde já agradeço, muito obrigado.


    PabloSousa

    domingo, 13 de agosto de 2017 20:03
  • Top 20 , serve para limitar até quantos registros vc quer trazer, ou seja se existirem 1.milhão de registros na tabela que satisfaçam os criterios , vc limita que s´s tragam 20. 

    agora para começar a aprender eu sugiro um treinamento básico de T-SQL 

    Treinamento Básico de T-SQL

    Wesley Neves - Brasilia-DF

     
    wesley.si.neves@gmail.com
    MTA-SQL Server
    MTA- Web Development
    Analista Desenvolvedor.NET
    Pós-Graduando em Banco de Dados 
    "Se a resposta for útil ou ajudar ,não esqueça de marcar"



    Wesley Neves

    segunda-feira, 14 de agosto de 2017 11:19
  • Bom Dia Wesley!!!

    Wesley obrigado pelo esclarecimento sobre top 20, muito obrigado.

    Obrigado pela dica dei uma olhada no link que você passou, entrar mais a fundo nisso, agora será que não esta retornando dados porque seu banco de dados e access??? ou não tem nada a ver???

    Porque pela data traz o resultado agora com o nome do cliente junto não retorna.

    Desde já agradeço, muito obrigado.


    PabloSousa

    segunda-feira, 14 de agosto de 2017 14:23