Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Sign in to follow this  
Manhunt

[Resolvido] Problema ao fazer contagens de dados

Recommended Posts

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.

Share this post


Link to post
Share on other 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'"

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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) & ""

Share this post


Link to post
Share on other 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.

:)

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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.  :)

Share this post


Link to post
Share on other 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)

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other 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.

:)

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.