MaximoAccess

Caro Usuário, antes de postar pela primeira vez, leia as regras do fórum.

https://www.maximoaccess.com/t48-regras-do-forum

Obrigado

Administração


Participe do fórum, é rápido e fácil

MaximoAccess

Caro Usuário, antes de postar pela primeira vez, leia as regras do fórum.

https://www.maximoaccess.com/t48-regras-do-forum

Obrigado

Administração

MaximoAccess

Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Dicas Ms Access, Exemplos Ms Access, Codigos VBA Ms Access, SQL Ms Access


2 participantes

    Se nulo, repetir linha anterior

    Gabriel Brunichaki
    Gabriel Brunichaki
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 138
    Registrado : 11/12/2015

    Se nulo, repetir linha anterior Empty Se nulo, repetir linha anterior

    Mensagem  Gabriel Brunichaki Qua 10 Fev 2016, 1:01 pm

    Boa tarde!

    Tenho uma consulta que exibe dados semanais, somando ou subtraindo o balanço de um determinado produto em estoque. Acontece que há semanas em que nem se soma, nem se diminui nada, portanto gostaria que a quantidade se repetisse de acordo com a linha acima caso não houvesse alteração.

    Por enquanto, está assim:

    Se nulo, repetir linha anterior 2dc7v4w

    Gostaria que ficasse assim, substituindo os 0 pelo valor acima:

    Se nulo, repetir linha anterior 9hjtr9

    Valeu!


    .................................................................................
    “Não podemos solucionar problemas usando a mesma forma de raciocínio que usamos quando os criamos.”
    – Albert Einstein
    philipp.moreira
    philipp.moreira
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 257
    Registrado : 05/02/2016

    Se nulo, repetir linha anterior Empty Re: Se nulo, repetir linha anterior

    Mensagem  philipp.moreira Qua 10 Fev 2016, 1:46 pm

    Pode publicar seu BD em algum local (Drop box, google drive, posta-lo aqui no fórum) para que possa ver sua consulta e como sua base esta estruturada ?
    Gabriel Brunichaki
    Gabriel Brunichaki
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 138
    Registrado : 11/12/2015

    Se nulo, repetir linha anterior Empty Re: Se nulo, repetir linha anterior

    Mensagem  Gabriel Brunichaki Qua 10 Fev 2016, 4:11 pm

    Cara, desculpa a demora, mas é que por uma tremenda infelicidade meu banco corrompeu, inclusive o backup Sad Sad Sad
    Tava tentando restaurar mas não teve jeito... Mas eu gostaria de saber se tem como fazer isto que indiquei na primeira mensagem, de replicar o valor de cima se for nulo...
    Talvez tu consiga fazer um exemplinho pequeno ou algo assim, e eu tento adaptar, não sei.


    .................................................................................
    “Não podemos solucionar problemas usando a mesma forma de raciocínio que usamos quando os criamos.”
    – Albert Einstein
    philipp.moreira
    philipp.moreira
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 257
    Registrado : 05/02/2016

    Se nulo, repetir linha anterior Empty Re: Se nulo, repetir linha anterior

    Mensagem  philipp.moreira Qua 10 Fev 2016, 5:04 pm

    Gabriel,
    penso em duas soluções:

    1ª - Manter esta sua consulta inicial. Depois através do VBA popular um recordset, e ao percorrer implementar a lógica de atualizar o valor do campo baseado na suas condições, e finalmente popular uma tabela para que possa recupera-lo em um form, relatório, etc.

    2ª - Manter sua consulta inicial e criar uma 2ª semelhante, porém, cruzando com a 1ª e utilizar keyword IIF dentro do código SQL para implementar a logica que deseja.

    Eu particularmente optaria pela 1ª opção.
    Criar um exemplo fica complicado pois não consigo pensar uma necessidade para demonstrar.

    Desculpe não ajudar mais.
    Gabriel Brunichaki
    Gabriel Brunichaki
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 138
    Registrado : 11/12/2015

    Se nulo, repetir linha anterior Empty Re: Se nulo, repetir linha anterior

    Mensagem  Gabriel Brunichaki Qua 10 Fev 2016, 5:10 pm

    Ok, acho que entendi, mas como seria o if enquanto percorre?

    If [balanco] = 0 Then
    "Balanço vai ser igual ao valor acima (imagino que algo relacionado a ID <= ID)"
    End If

    Como escrever essa lógica?


    .................................................................................
    “Não podemos solucionar problemas usando a mesma forma de raciocínio que usamos quando os criamos.”
    – Albert Einstein
    philipp.moreira
    philipp.moreira
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 257
    Registrado : 05/02/2016

    Se nulo, repetir linha anterior Empty Re: Se nulo, repetir linha anterior

    Mensagem  philipp.moreira Qua 10 Fev 2016, 5:50 pm

    Se na 1ª semana o valor for 0 como deve ser implementado a regra?
    Gabriel Brunichaki
    Gabriel Brunichaki
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 138
    Registrado : 11/12/2015

    Se nulo, repetir linha anterior Empty Re: Se nulo, repetir linha anterior

    Mensagem  Gabriel Brunichaki Qua 10 Fev 2016, 5:53 pm

    Se no primeiro registro o valor for 0, vai ser 0, porque é a quantidade inicial. Mas se houver um registro igual a 0 entre dois registros diferentes de 0, aí o registro que é igual a 0 passa a ser igual ao número acima diferente de 0.

    Caraca, que complicado :z


    .................................................................................
    “Não podemos solucionar problemas usando a mesma forma de raciocínio que usamos quando os criamos.”
    – Albert Einstein
    philipp.moreira
    philipp.moreira
    Avançado
    Avançado


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 257
    Registrado : 05/02/2016

    Se nulo, repetir linha anterior Empty Re: Se nulo, repetir linha anterior

    Mensagem  philipp.moreira Qua 10 Fev 2016, 6:49 pm

    Gabriel, imagino que a lógica e estrutura seria mais ou menos, conforme abaixo.
    Caso alguns dos colegas consiga dar uma melhorada, rsrs. Wink


    Sub teste()

    Dim rs_Origem As DAO.Recordset

    Dim IRow As Integer
    Dim valorAnterior As Integer
    Dim valorAtual As Integer
    Dim ProximoValor As Integer

    CurrentDb.Execute "DELET * FROM [Tabela1]"

    Set rs_Origem = CurrentDb.OpenRecordset("Tab_Vendas")

    If rs_Origem.RecordCount > 0 Then

    IRow = rs_Origem.RecordCount

    While IRow <= rs_Origem.RecordCount

    ' Tratamento: 1ª - Linha
    If IRow = rs_Origem.RecordCount Then
    CurrentDb.Execute "INSERT INTO [Tabela1] ( Campo1, Campo2) VALUES ('" & rs_Origem(0) & "', " & rs_Origem(1) & ")"

    ' Tratamento: Última Linha
    ElseIf IRow = 1 Then
    CurrentDb.Execute "INSERT INTO [Tabela1] ( Campo1, Campo2) VALUES ('" & rs_Origem(0) & "', " & rs_Origem(1) & ")"

    valorAtual = rs_Origem(1)

    rs_Origem.MovePrevious
    valorAnterior = rs_Origem(1)

    rs_Origem.MoveNext

    If (valorAtual = 0 And valorAnterior > 0) Then
    valorAtual = valorAnterior
    CurrentDb.Execute "INSERT INTO [Tabela1] ( Campo1, Campo2) VALUES ('" & rs_Origem(0) & "', " & valorAtual & ")"

    Else
    CurrentDb.Execute "INSERT INTO [Tabela1] ( Campo1, Campo2) VALUES ('" & rs_Origem(0) & "', " & rs_Origem(1) & ")"

    End If

    ' Tratamento Demais Linhas
    Else
    If rs_Origem(1) = 0 Then
    valorAtual = rs_Origem(1)

    rs_Origem.MovePrevious
    valorAnterior = rs_Origem(1)

    rs_Origem.MoveNext
    rs_Origem.MoveNext
    ProximoValor = rs_Origem(1)

    rs_Origem.MovePrevious

    If (valorAtual = 0 And (valorAnterior > 0 And ProximoValor > 0)) Then
    valorAtual = valorAnterior
    CurrentDb.Execute "INSERT INTO [Tabela1] ( Campo1, Campo2) VALUES ('" & rs_Origem(0) & "', " & valorAtual & ")"

    Else
    CurrentDb.Execute "INSERT INTO [Tabela1] ( Campo1, Campo2) VALUES ('" & rs_Origem(0) & "', " & rs_Origem(1) & ")"

    End If

    End If
    End If

    IRow = IRow - 1
    rs_Origem.MoveNext

    Wend
    Else
    ' Implementa o tratamento necessário caso a consulta não retorne valores
    MsgBox "Consulta não retorna valores"
    End If

    End Sub
    Gabriel Brunichaki
    Gabriel Brunichaki
    Intermediário
    Intermediário


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 138
    Registrado : 11/12/2015

    Se nulo, repetir linha anterior Empty Re: Se nulo, repetir linha anterior

    Mensagem  Gabriel Brunichaki Qui 11 Fev 2016, 9:18 am

    [Tabela1] seria a consulta? Tô tentando entender o procedimento, é que nunca usei VBA em consultas, fiquei meio perdido.

    Ó, fiz um pequeno exemplo pra ver se fica melhor para nós dois. Observe que na CLT_SEMANAL consta todas as semanas do ano de 2015, mas apenas algumas delas contém registro de "Quantidade". Consegue inserir esse procedimento que me passou neste banco em anexo?
    Anexos
    Se nulo, repetir linha anterior AttachmentOi.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (33 Kb) Baixado 20 vez(es)


    .................................................................................
    “Não podemos solucionar problemas usando a mesma forma de raciocínio que usamos quando os criamos.”
    – Albert Einstein

    Conteúdo patrocinado


    Se nulo, repetir linha anterior Empty Re: Se nulo, repetir linha anterior

    Mensagem  Conteúdo patrocinado


      Data/hora atual: Sex 22 Nov 2024, 5:34 pm