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

vasco16

Adicionar 90 dias a uma data

13 mensagens neste tópico

Boas pessoal quero que seja apresentado numa datagrid todos os registos que tenham menos de 90 dias, para isso estou a fazer assim:

Dim data5 As Date
        data5 = Date.Now
        Dim strsql As String = "Select dateadd(day,-90, '" & data5 & "')AS "-1 Day""


        TextBox3.Text = RetornaValor(strsql)

        Dim db As New OleDb.OleDbConnection(bd1.My.Settings.ligacaoBD)
        ' LIGAR A BD
        db.Open()

        Dim data3 As Date
        data3 = Date.Now
        ' ACESSO AOS DADOS
        Dim comandosql = "Select ID_PERDIDO,DATA,TURNO,PRODUTO,DESCRICAO,FUNCIONARIO,DATA_SAIDA,RESPONSAVEL_SAIDA,ABATIDO,N_CARTAO,CLIENTE,CONTACTO,ENTREGUE from addperdidos where data < '" & TextBox3.Text & "' "
        Dim cmd As New OleDb.OleDbCommand(comandosql, db)

        Dim dtr As OleDb.OleDbDataReader = cmd.ExecuteReader(CommandBehavior.CloseConnection)

        ' CRIAÇÃO DE COLUNAS NO DATAGRIDVIEW
        Dim num_campos As Integer
        Dim campo As String

        DataGridView4.Columns.Clear()
        DataGridView4.RowHeadersVisible = False

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

        Next
        DataGridView4.Columns.Item(0).Width = 50
        DataGridView4.Columns.Item(1).Width = 50
        DataGridView4.Columns.Item(2).Width = 50
        DataGridView4.Columns.Item(3).Width = 50
        DataGridView4.Columns.Item(4).Width = 254
        DataGridView4.Columns.Item(5).Width = 50
        DataGridView4.Columns.Item(6).Width = 50
        DataGridView4.Columns.Item(7).Width = 50
        DataGridView4.Columns.Item(8).Width = 50
        DataGridView4.Columns.Item(9).Width = 50
        DataGridView4.Columns.Item(10).Width = 50
        DataGridView4.Columns.Item(11).Width = 50
        DataGridView4.Columns.Item(12).Width = 50


        ' CARREGAR OS DADOS
        Dim idx_linha As Integer
        idx_linha = 0

        While dtr.Read()
            Dim linha As New DataGridViewRow()
            DataGridView4.Rows.Add(linha)
            DataGridView4.Rows(idx_linha).Cells(0).Value = dtr.Item(0)
            DataGridView4.Rows(idx_linha).Cells(1).Value = RTrim(dtr.Item(1))
            DataGridView4.Rows(idx_linha).Cells(2).Value = RTrim(dtr.Item(2))
            DataGridView4.Rows(idx_linha).Cells(3).Value = RTrim(dtr.Item(3))
            DataGridView4.Rows(idx_linha).Cells(4).Value = RTrim(dtr.Item(4))
            DataGridView4.Rows(idx_linha).Cells(5).Value = RTrim(dtr.Item(5))
            DataGridView4.Rows(idx_linha).Cells(6).Value = RTrim(dtr.Item(6))
            DataGridView4.Rows(idx_linha).Cells(7).Value = RTrim(dtr.Item(7))
            DataGridView4.Rows(idx_linha).Cells(8).Value = RTrim(dtr.Item(8))
            DataGridView4.Rows(idx_linha).Cells(9).Value = RTrim(dtr.Item(9))
            DataGridView4.Rows(idx_linha).Cells(10).Value = RTrim(dtr.Item(10))
            DataGridView4.Rows(idx_linha).Cells(11).Value = RTrim(dtr.Item(11))
            DataGridView4.Rows(idx_linha).Cells(12).Value = RTrim(dtr.Item(12))



            idx_linha = idx_linha + 1

        End While
        ' AJUSTE DAS COLUNAS DO DATAGRIDVIEW
        DataGridView4.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells
        ' FECHAR A BD
        dtr.Close()

só que nao está a avaliar nada :S estou a fazer bem? existem outros metodos?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Dim comandosql = "Select ID_PERDIDO,DATA,TURNO,PRODUTO,DESCRICAO,FUNCIONARIO,DATA_SAIDA,RESPONSAVEL_SAIDA,ABATIDO,N_CARTAO,CLIENTE,CONTACTO,ENTREGUE from addperdidos where data < '" & TextBox3.Text & "' "

Neste comando aqui, estás a comparar um campo Data com uma string.

Se o campo data estiver em datetime na bd, a comparação deve ser feita com um datetime de .net

Podes usar o datetime.parse para converter a string em data.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Dim comandosql = "Select ID_PERDIDO,DATA,TURNO,PRODUTO,DESCRICAO,FUNCIONARIO,DATA_SAIDA,RESPONSAVEL_SAIDA,ABATIDO,N_CARTAO,CLIENTE,CONTACTO,ENTREGUE from addperdidos where data < '" & TextBox3.Text & "' "

Neste comando aqui, estás a comparar um campo Data com uma string.

Se o campo data estiver em datetime na bd, a comparação deve ser feita com um datetime de .net

Podes usar o datetime.parse para converter a string em data.

na tabela o campo data está como texto. no vb é que mando os dados como data. faço isso que disses-te?

EDIT:

Lembrei-me agora que estou a guardar a data assim:

Dim data1 As Date
                data1 = Date.Now

que na tabela do acess fica assim: 28-08-2009 19:51:35 o que eu queria mesmo era se por exemplo hoje fosse mais 90 dias que essa data que aparecesse na minha datagrid, acho que o meu problema está mesmo na minha instrução SQL.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se conseguires fazer isso logo na query é melhor. Em access não sei como fazer.

Caso n consigas fazer na query tb é possivel filtrar por código no vb.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se conseguires fazer isso logo na query é melhor. Em access não sei como fazer.

Caso n consigas fazer na query tb é possivel filtrar por código no vb.

pois o mais simples era mesmo fazer na query, estava a pensar em fazer isto:

Dim data3 As DateTime = DateTime.Now

        Dim dias As Integer = 90 'vamos adicionar 90 dias

        data3 = data3.Adddays(dias)

        ' ACESSO AOS DADOS

        Dim comandosql = "Select ID_PERDIDO,DATA,TURNO,PRODUTO,DESCRICAO,FUNCIONARIO from addperdidos where (Data < '" & data3 & "') and ((ABATIDO = 'NÃO') and (ENTREGUE = 'NÃO'))"

        Dim cmd As New OleDb.OleDbCommand(comandosql, db)

mas parece que não me passa meses.. ou seja está sempre a acrescentar dias.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Faz debug para veres qual é o valor de data3 e se é o q estavas á espera.

Só umas observações, em vez de usares concatenações nas querys, devias usar parametros.

E teres campos com SIM e NÃO tb n me parece mto bem. Um campo boolean ou bit seria mais adequado.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Faz debug para veres qual é o valor de data3 e se é o q estavas á espera.

Só umas observações, em vez de usares concatenações nas querys, devias usar parametros.

E teres campos com SIM e NÃO tb n me parece mto bem. Um campo boolean ou bit seria mais adequado.

pois, ainda não tenho muita pratica. mas achas que vou ter problemas no futuro ?

EDIT:

só me diz que tem mais 90 dias. :S

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se vais ter problemas não sei, até podes n vir a ter.

De qualquer maneira usares querys com parametros em vez de concatenações e campos boolean ou bit em vez de Sim e Não é uma solução melhor.

E já que estás a fazer, não vejo nenhum motivo para não fazeres bem.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se vais ter problemas não sei, até podes n vir a ter.

De qualquer maneira usares querys com parametros em vez de concatenações e campos boolean ou bit em vez de Sim e Não é uma solução melhor.

E já que estás a fazer, não vejo nenhum motivo para não fazeres bem.

Eu acho que pela lógica que estou a levar (que é adicionar 90 dias) não vou longe.. porque só me vai adicionar 90 dias aos dias e nao avança com o resto da data (meses, e ano).. nao existirá nenhuma outra forma mais em conta de fazer isto?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O método AddDays faz andar os 90 dias no calendário, altera dia, mês e ano se for caso disso.

Faz debug para tentares perceber pq é q o resultado q estás á espera n está a acontecer.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

O método AddDays faz andar os 90 dias no calendário, altera dia, mês e ano se for caso disso.

Faz debug para tentares perceber pq é q o resultado q estás á espera n está a acontecer.

estou a conseguir obter a data de hoje, mas quando adiciono 90 dias nao me mostra a data com 90 dias. :S

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

De facto estive a observar bem e quando faço debug a data aparece-me assim:  mes,dia,ano já quando gravo a data para a BD tambem aparece assim mas na BD quando a vou ver no registo está assim: dia,mes, ano será por isto que nao estou a conseguir comparar?

'Define as variáveis

        Dim hoje As Date = Today

        Dim agora As Date = Now

        Console.WriteLine("Hoje é dia: " & agora)

        agora = agora.AddDays(-90)

        Console.WriteLine("Somando-se 2 dias: " & agora)

        ' ACESSO AOS DADOS

        Dim comandosql = "Select ID_PERDIDO,DATA,TURNO,PRODUTO,DESCRICAO,FUNCIONARIO from addperdidos where (DATA < '" & agora & "')"

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Boas, tens de converter a data para o formato do SQL

....from addperdidos where (DATA < '" & agora.ToString("yyyy-MM-dd")& "')"

.ToString("yyyy-MM-dd")

Ou

.ToString("yyyy-MM-dd HH:mm:ss")

compr.

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