Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Manhunt

[Resolvido] Problema ao fazer contagens de dados

Mensagens Recomendadas

Manhunt

Boas,

Eu venho aqui mais uma vez, porque estou mesmo atrapalhado e preciso de tentar resolver um pequeno problema que tenho em mãos.

É o seguinte:

Eu tenho um formulário que tem vários botões e cada um desses botões, serve para contar dados de uma determinada tabela.

Até aqui tudo bem, só que agora percebi que a tabela tem registos de vários anos e o que fiz, foi adicionar uma ComboBox no formulário, que serve para escolher o ano em que quero fazer a contagem dos dados, ou seja, escolho o ano, clico no botão e aparecerá uma msgbox a dizer o total de registos com aquele ano.

Ex:

C  Marca    Ano

1  Ford      2009

2  Renault  2010

3  Ford      2010

Aqui clicava na ComboBox e escolhia "2010", depois clicava no botão "contar carros ford" e aparecia a msgBox a dar o resultado, que neste caso é 1, porque só existe um carro ford registado em 2010.

Mas... Como é que faço isto? Podem me dar uma ajuda? Fico agradecido por qualquer ajuda, pois sou um pouco leigo nisto e ando a aprender sozinho.

Deixo aqui o código que estou a usar para fazer as contagens.

Private Sub Button10_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button10.Click
        Dim Cxn As String = "Data source=.\SQLEXPRESS;AttachDbFilename=C:\BaseDados\Carros\Dados.mdf;Integrated Security=True;User Instance=True"

        Dim SQL As String = "SELECT COUNT(Cod) AS total FROM Carros WHERE Marcas = 'Ford'"

        Dim connection As New SqlConnection(Cxn)

        Dim command As New SqlCommand(SQL, connection)

        connection.Open()

        Dim total As Integer = command.ExecuteScalar()
        MessageBox.Show("Estão registados " + total.ToString + " carros da marca Ford.", "Contagem", MessageBoxButtons.OK, MessageBoxIcon.Information)
        connection.Close()
        connection = Nothing
        command = Nothing
    End Sub

Espero que me possam ajudar.

Desde já obrigado.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
bioshock

Creio que estás a fazer mal a query, pelo menos no PHP eu não fazia assim, fazia um SUM(), experimenta antes:

"SELECT SUM(Cod) AS total FROM Carros WHERE Marcas = 'Ford'"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Pwyll

Ele quer contar o numero de registos e nao somar o valor do campo.

Onde tens:

Dim SQL As String = "SELECT COUNT(Cod) AS total FROM Carros WHERE Marcas = 'Ford'"

experimenta:

Dim SQL As String = "SELECT COUNT(Cod) AS total FROM Carros WHERE Marcas = '" & cboMarcas.selectedvalue & "' AND Ano = " cint(cboAno.selectedvalue)

Supondo que a combo das marcas se chama cboMarcas a combo dos anos se chama cboAnos e o campo para o Ano na tabela de SQL se chama Ano.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
bioshock

Até aqui tudo bem, só que agora percebi que a tabela tem registos de vários anos e o que fiz, foi adicionar uma ComboBox no formulário, que serve para escolher o ano em que quero fazer a contagem dos dados, ou seja, escolho o ano, clico no botão e aparecerá uma msgbox a dizer o total de registos com aquele ano.

Se ele sumar os registos, ele dizer-lhe-à o total.

Dim SQL As String = "SELECT COUNT(Cod) AS total FROM Carros WHERE Marcas = '" & cboMarcas.selectedvalue & "' AND Ano = " cint(cboAno.selectedvalue)

Não sei até que ponto está mal a última instrução, just in case faz antes:

Dim SQL As String = "SELECT COUNT(Cod) AS total FROM Carros WHERE Marcas = '" & cboMarcas.selectedvalue & "' AND Ano = " & cint(cboAno.selectedvalue) & ""

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Manhunt

Boas amigos.

Desde já agradeço a vossa ajuda que me vai ser preciosa para resolver isto.

Por enquanto fim um teste muito rápido com os vossos códigos, mas pelo que percebi ambos não funcionam a 100%, mas também poderei estar a copiar mal ou com a pressa, poderei-me ter esquecido de algum pormenor.

Mais logo testarei com mais atenção e depois digo algo.

:)

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Pwyll

Bioshock, so para nao ficar nenhuma ideia errada, apesar de isto ser mais sql do que vb.net.

Supondo que tens uma tabela xpto com os seguintes registos:

Cod Descricao

1    aaaa

2    bbbb

3    ccccc

Se fizeres :

SELECT SUM(Cod) From xpto

resultado = 6

Se fizeres

SELECT COUNT(Cod) From xpto

resultado = 3

Quanto as aspas..... Tudo depende do data type do campo

Exemplo se campo Ano for varchar entao ano="2010" se for integer entao ano=2010

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
bioshock

Bioshock, so para nao ficar nenhuma ideia errada, apesar de isto ser mais sql do que vb.net.

Supondo que tens uma tabela xpto com os seguintes registos:

Cod Descricao

1    aaaa

2    bbbb

3    ccccc

Se fizeres :

SELECT SUM(Cod) From xpto

resultado = 6

Se fizeres

SELECT COUNT(Cod) From xpto

resultado = 3

Quanto as aspas..... Tudo depende do data type do campo

Exemplo se campo Ano for varchar entao ano="2010" se for integer entao ano=2010

Oh, tens mais do que razão. Eu não estava a associar o campo "Cod", passou-me despercebido completamente, peço desculpa.  :)

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Manhunt

Boas,

Depois de testar os códigos, posso dizer que não me estão a dar, porque quando clico no botão aparece-me a msgbox a anunciar que tenho 0 registos, quando é falso porque a tabela tem registos, de vários e ComboBox está a ir buscar os anos bem.

Dantes contava os dados, mas não fazia a contagem pelo ano, agora, mude ou não mude de ano, o resultado é sempre igual a zero. :)

Há mais alguma ideia?

Edit:

Agora pus o código assim e diz que existe uma sintaxe errada ao lado do ano que escolho, podendo esse ano ser 2008, 2009 ou 2010

Dim SQL As String = "SELECT COUNT(Cod) AS total FROM Carros WHERE Marcas = Ford'" & ComboBox_Ano.SelectedValue & "' AND Ano = " & CInt(ComboBox_Ano.SelectedValue)

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
ByMySlf

Tenta asim:

Dim SQL As String = "SELECT COUNT(Cod) AS total FROM Carros WHERE Marcas = 'Ford' AND Ano = " & CInt(ComboBox_Ano.SelectedValue)

Espero não me estar a escapar nada.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Manhunt

Ahhh!!!

Boa, é mesmo isso.  :cheesygrin:

Agora dá bem o Código. Agora selecciono o ano e já vai buscar as marcas de carros, tendo aquele ano como referência.

Muito obrigado a todos, graças a vocês estou a aprender muito mais do que esperava e sempre resolvi este pequeno (grande) problema.  :D

Cumps.

:)

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.