Jump to content

Adicionar 90 dias a uma data


vasco16

Recommended Posts

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?

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

Matraquilhos para Android.

Gratuito na Play Store.

https://play.google.com/store/apps/details?id=pt.bca.matraquilhos

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

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

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

Matraquilhos para Android.

Gratuito na Play Store.

https://play.google.com/store/apps/details?id=pt.bca.matraquilhos

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

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

Matraquilhos para Android.

Gratuito na Play Store.

https://play.google.com/store/apps/details?id=pt.bca.matraquilhos

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

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

Link to comment
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
×
×
  • Create New...

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.