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

vasco16

Qual o mes de uma data?

14 mensagens neste tópico

boas pessoal tenho um problema que é o seguinte:

Quero filtrar os meus dados por por exemplo o mes de janeiro, para isso uso este código:

Dim db As New OleDbConnection(my.My.Settings.ligacaoBD)

        ' LIGAR A BD
        db.Open()

        ' ACESSO AOS DADOS
        Dim comandosql = "Select matricula, valor, data from despesas_viaturas where DATA between #" & ComboBox1.Text & "-01-01# and #" & ComboBox1.Text & "-01-31#"

        Dim cmd As New OleDbCommand(comandosql, db)
        Dim dtr As OleDbDataReader = cmd.ExecuteReader(CommandBehavior.CloseConnection)


        ' CRIAÇÃO DE COLUNAS NO DATAGRIDVIEW
        Dim num_campos As Integer
        Dim campo As String
        DataGridView1.Columns.Clear()

        num_campos = dtr.FieldCount
        Dim idx As Integer
        For idx = 0 To num_campos - 1
            campo = dtr.GetName(idx)
            DataGridView1.Columns.Add(campo, campo)
        Next

        ' CARREGAR OS DADOS
        Dim idx_linha As Integer
        idx_linha = 0

        While dtr.Read()
            Dim linha As New DataGridViewRow()
            DataGridView1.Rows.Add(linha)
            DataGridView1.Rows(idx_linha).Cells(0).Value = dtr.Item(0)
            DataGridView1.Rows(idx_linha).Cells(1).Value = RTrim(dtr.Item(1))
            DataGridView1.Rows(idx_linha).Cells(2).Value = RTrim(dtr.Item(2))

            idx_linha = idx_linha + 1
        End While

        ' AJUSTE DAS COLUNAS DO DATAGRIDVIEW
        DataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.None

        ' FECHAR A BD
        dtr.Close()

        Dim inttotal As Double

        Dim y As DataGridViewRow
        For Each y In DataGridView1.Rows
            inttotal += y.Cells(1).Value
        Next
        TextBox2.Text = inttotal

        Dim ass As Integer

        ass = idx_linha
        TextBox2.Text = ass

        Label3.Text = "Janeiro"

        ' Limpa a informação anterior
        Chart1.ChartAreas.Clear()
        Chart1.Series.Clear()

        ' Define nova informação
        Dim chartArea1 As New ChartArea()
        Chart1.ChartAreas.Add(chartArea1)

        Dim series1 As New Series()
        Dim series2 As New Series()

        valor1()
        series1.Points.Add(TextBox1.Text)
        series2.Points.Add(TextBox2.Text)

        series1.IsValueShownAsLabel = True
        series2.IsValueShownAsLabel = True
        series2.AxisLabel = " "

        series1.Name = "Despesas (€)"
        series2.Name = "Nº de despesas"

        chartArea1.Area3DStyle.Enable3D = True

        Chart1.Series.Add(series1)
        Chart1.Series.Add(series2)

        ' Chart1.Location = New System.Drawing.Point(500, 300)
        Chart1.Size = New System.Drawing.Size(500, 500)

só que ele está  a ir buscar os dados todos...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

A classe DateTime tem uma propriedade q é Month. Podes extrair daí o mês q precisas.

Antes de testares logo e dar erro, primeiro vê o q o Month devolve, se é o nome da data, se é um inteiro, isso n me lembro ao certo.

Depois organiza a query para receber o mês da maneira q te der jeito.

Depois de testares estas 2 coisas individualmente adapta então o teu código.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

A classe DateTime tem uma propriedade q é Month. Podes extrair daí o mês q precisas.

mas isso na condição sql?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não, isso da classe datetime do .net

se tiveres um datetime:

DateTime d = DateTime.Today;

podes aceder ao seu mês:

int nrMes = d.Month;

Retorna um inteiro com o nr do mês

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

no sql também convém criares uma coluna com o mês... não me parece que ele vá sacar isso directamente à data...

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

no sql também convém criares uma coluna com o mês... não me parece que ele vá sacar isso directamente à data...

como assim? na tabela? um campo com o mes?:S

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

datepart(month, NOME_COLUNA_DATA)

NOME_COLUNA_DATA -> Coluna no formato datetime

Esta função retorna um inteiro com o mês, pode ser comparado com o do DateTime do .net.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu uso sempre as datas no formato YYYYMMDD  Por exemplo 20-05-2009 fica na base de dados 20090520 é muito mais simples de trabalhar depois.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu uso sempre as datas no formato YYYYMMDD  Por exemplo 20-05-2009 fica na base de dados 20090520 é muito mais simples de trabalhar depois.

Isso depende de cada um. Eu prefiro ter mesmo o datetime para poder usar as funções de datas logo directamente.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

boas pessoal tenho um problema que é o seguinte:

Quero filtrar os meus dados por por exemplo o mes de janeiro, para isso uso este código:

Dim db As New OleDbConnection(my.My.Settings.ligacaoBD)

        ' LIGAR A BD
        db.Open()

        ' ACESSO AOS DADOS
        Dim comandosql = "Select matricula, valor, data from despesas_viaturas where DATA between #" & ComboBox1.Text & "-01-01# and #" & ComboBox1.Text & "-01-31#"

        Dim cmd As New OleDbCommand(comandosql, db)
        Dim dtr As OleDbDataReader = cmd.ExecuteReader(CommandBehavior.CloseConnection)


        ' CRIAÇÃO DE COLUNAS NO DATAGRIDVIEW
        Dim num_campos As Integer
        Dim campo As String
        DataGridView1.Columns.Clear()

        num_campos = dtr.FieldCount
        Dim idx As Integer
        For idx = 0 To num_campos - 1
            campo = dtr.GetName(idx)
            DataGridView1.Columns.Add(campo, campo)
        Next

        ' CARREGAR OS DADOS
        Dim idx_linha As Integer
        idx_linha = 0

        While dtr.Read()
            Dim linha As New DataGridViewRow()
            DataGridView1.Rows.Add(linha)
            DataGridView1.Rows(idx_linha).Cells(0).Value = dtr.Item(0)
            DataGridView1.Rows(idx_linha).Cells(1).Value = RTrim(dtr.Item(1))
            DataGridView1.Rows(idx_linha).Cells(2).Value = RTrim(dtr.Item(2))

            idx_linha = idx_linha + 1
        End While

        ' AJUSTE DAS COLUNAS DO DATAGRIDVIEW
        DataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.None

        ' FECHAR A BD
        dtr.Close()

        Dim inttotal As Double

        Dim y As DataGridViewRow
        For Each y In DataGridView1.Rows
            inttotal += y.Cells(1).Value
        Next
        TextBox2.Text = inttotal

        Dim ass As Integer

        ass = idx_linha
        TextBox2.Text = ass

        Label3.Text = "Janeiro"

        ' Limpa a informação anterior
        Chart1.ChartAreas.Clear()
        Chart1.Series.Clear()

        ' Define nova informação
        Dim chartArea1 As New ChartArea()
        Chart1.ChartAreas.Add(chartArea1)

        Dim series1 As New Series()
        Dim series2 As New Series()

        valor1()
        series1.Points.Add(TextBox1.Text)
        series2.Points.Add(TextBox2.Text)

        series1.IsValueShownAsLabel = True
        series2.IsValueShownAsLabel = True
        series2.AxisLabel = " "

        series1.Name = "Despesas (€)"
        series2.Name = "Nº de despesas"

        chartArea1.Area3DStyle.Enable3D = True

        Chart1.Series.Add(series1)
        Chart1.Series.Add(series2)

        ' Chart1.Location = New System.Drawing.Point(500, 300)
        Chart1.Size = New System.Drawing.Size(500, 500)

só que ele está  a ir buscar os dados todos...

o meu problema é que eu nem estou a conseguir filtrar os dados segundo o ano introduzido na combo box

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Isso depende de cada um. Eu prefiro ter mesmo o datetime para poder usar as funções de datas logo directamente.

Eu também!

Já colocaste um novo campo no comando SQL usando o datepart ?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Eu também!

Já colocaste um novo campo no comando SQL usando o datepart ?

como assim?:s na instrução SQL?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Escolher só o mes de Janeiro do ano indicado na Combobox:

  Dim comandosql = "SELECT matricula, valor, data FROM despesas_viatura WHERE MONTH(data)=1 AND YEAR(data)=" & ComboBox1.Text

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Escolher só o mes de Janeiro do ano indicado na Combobox:

  Dim comandosql = "SELECT matricula, valor, data FROM despesas_viatura WHERE MONTH(data)=1 AND YEAR(data)=" & ComboBox1.Text

obrigado.

0

Partilhar esta mensagem


Link 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