MaximoAccess

Caro Usuário, não tire as suas duvidas nas Salas de Repositório, abra sempre um novo tópico relacionado, nas salas destinadas para o efeito, como Sala de Tabelas, Consultas, Formulários, Relatórios, Macros, Módulos e VBA.

Obrigado

Administração do MaximoAccess

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

    [Resolvido]Preencher campos em branco com informações do último registro não null

    Compartilhe

    dbragion
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 12
    Registrado : 05/09/2011

    Preencher campos em branco com informações do último registro não null

    Mensagem  dbragion em Seg 05 Set 2011, 14:29

    Bom dia!

    Segue aquivo anexo com minha dúvida.

    sou iniciante em vba access e preciso criar um código que faça um loop para preencher uma tabela de 200 mil linhas onde o código só existe quando é alterado. Preciso que repita em cada registro.

    Em resumo:

    Tabela Original

    Código__Campo1__Campo2__________Campo3
    3_______110202__asdfsdfsdfsdf asdfdsfsdf
    4_______________adfsfd__________sdfsdf
    5_______________sdfds___________dsf
    6_______________sd______________dsdfd
    7_______________sdf_____________sdf
    9_______220303__dfdf____________fdf
    10______________fd______________fd
    11______________df______________fd
    12______________df______________fd
    13______________df______________fd
    14______________df______________df
    15______________sddsa___________df

    quero preencher o campo1 com a última informação não nula. (são + de 200 mil linhas)

    Código__Campo1__Campo2___________Campo3
    3_______110202__asdfsdfsdfsdf____asdfdsfsdf
    4_______110202__adfsfd___________sdfsdf
    5_______110202__sdfds____________dsf
    6_______110202__sd_______________dsdfd
    7_______110202__sdf______________sdf
    9_______220303__dfdf_____________fdf
    10______220303__fd_______________fd
    11______220303__df_______________fd
    12______220303__df_______________fd
    13______230303__df_______________fd
    14______230303__df_______________df
    15______230303__sddsa____________df
    16______230303__DSFS_____________DF

    Grato pela atenção!
    se puderem postar e-mail envio o anexo, não estou conseguindo anexar aqui


    Última edição por dbragion em Ter 06 Set 2011, 13:06, editado 4 vez(es)

    bitabit
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 225
    Registrado : 15/07/2010

    Re: [Resolvido]Preencher campos em branco com informações do último registro não null

    Mensagem  bitabit em Seg 05 Set 2011, 20:47

    onde esta o anexo?

    Alexandre Neves
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 5890
    Registrado : 05/11/2009

    Re: [Resolvido]Preencher campos em branco com informações do último registro não null

    Mensagem  Alexandre Neves em Seg 05 Set 2011, 22:17

    Não percebi o que pretende

    vieirasoft
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 7125
    Registrado : 11/05/2010

    Re: [Resolvido]Preencher campos em branco com informações do último registro não null

    Mensagem  vieirasoft em Ter 06 Set 2011, 16:34

    Pode mandar para o meu email que eu coloco aqui

    [Você precisa estar registrado e conectado para ver este link.]

    dbragion
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 12
    Registrado : 05/09/2011

    Prezado moderador

    Mensagem  dbragion em Qui 08 Set 2011, 12:40

    enviei um e-mail com o anexo. Chegou a recebê-lo?
    Alguém tem idéia de como me ajudar?

    HARYSOHN
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 12246
    Registrado : 01/03/2011

    Re: [Resolvido]Preencher campos em branco com informações do último registro não null

    Mensagem  HARYSOHN em Qui 08 Set 2011, 12:58

    Observem que entre o registro de numero 110202 e 220303 o campo1 está nulo...

    Ele quer preencher o campo1 nulo neste intervalo com o valor do registro imediatamente anterior ao nulo

    No caso os regs 4,5,6,e 7 seriam atualizados com o valor do reg 3: 110202


    Código__Campo1__Campo2__________Campo3
    3_______110202__asdfsdfsdfsdf asdfdsfsdf
    4_______________adfsfd__________sdfsdf
    5_______________sdfds___________dsf
    6_______________sd______________dsdfd
    7_______________sdf_____________sdf
    9_______220303__dfdf____________fdf


    .................................................................................
    PILOTO
    الله أكبر Paz, Justiça e Liberdade! الله أكبر
    CLIQUE AQUI E VEJA O VÍDEO >>> BIOMETRIA EM ACCESS

    Iniciando no Access? Então veja esse tópico e também esse


    BUSCA NO FÓRUM - CLIQUE AQUI!!!

    Quando tua dúvida for RESOLVIDA, dê retorno com AGRADECIMENTO a aqueles que gastaram seu tempo em te ajudar.
    Clique no botão Resolvido logo acima do botão Enviar, do lado direito. Todos nós agradecemos.  
    [Você precisa estar registrado e conectado para ver esta imagem.]

    HARYSOHN
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 12246
    Registrado : 01/03/2011

    Re: [Resolvido]Preencher campos em branco com informações do último registro não null

    Mensagem  HARYSOHN em Qui 08 Set 2011, 13:02

    Nesta sua tabela, fora o campo Código e o campo 1 tem algum outro campo que possa diferenciar o que faz parte do reg 110202 e 220303?

    Informações que possam diferenciar o que'faz parte do 110202 e o que faz parte do 220303?


    .................................................................................
    PILOTO
    الله أكبر Paz, Justiça e Liberdade! الله أكبر
    CLIQUE AQUI E VEJA O VÍDEO >>> BIOMETRIA EM ACCESS

    Iniciando no Access? Então veja esse tópico e também esse


    BUSCA NO FÓRUM - CLIQUE AQUI!!!

    Quando tua dúvida for RESOLVIDA, dê retorno com AGRADECIMENTO a aqueles que gastaram seu tempo em te ajudar.
    Clique no botão Resolvido logo acima do botão Enviar, do lado direito. Todos nós agradecemos.  
    [Você precisa estar registrado e conectado para ver esta imagem.]

    dbragion
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 12
    Registrado : 05/09/2011

    Prezado Harysohn

    Mensagem  dbragion em Qui 08 Set 2011, 13:18

    Na verdade não.

    Será que existe a possibilidade de criar um vba ou sql que lei a registro a registro pela ordem do código e armazene o valor do campo1 um quando ele for válido e quando ele for nulo insira-o no campo1 registro a registro (loop)


    dbragion
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 12
    Registrado : 05/09/2011

    Harysohn

    Mensagem  dbragion em Qui 08 Set 2011, 14:17

    Acho q vc entendeu meu problema, existe solução no vba para isso?
    ou via consulta atualização no sql?

    dbragion
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 12
    Registrado : 05/09/2011

    um amigo me ajudou com este código em sql, só q no access não funciona, só no sql

    Mensagem  dbragion em Qui 08 Set 2011, 15:06

    DECLARE @CODIGO INTEGER;
    DECLARE @CCONTA VARCHAR(10);
    DECLARE @CCUSTO VARCHAR(10);
    DECLARE @CCONTA_ANT VARCHAR(10);
    DECLARE @CCUSTO_ANT VARCHAR(10);

    DECLARE @I INTEGER;

    DECLARE T_R_CE0406_Cursor CURSOR

    FOR (
    SELECT CODIGO,
    CONTA,
    CCUSTO
    FROM T_R_CE0406(NOLOCK)
    ORDER BY CODIGO
    ) OPEN T_R_CE0406_Cursor

    FETCH NEXT FROM T_R_CE0406_Cursor INTO @CODIGO, @CCONTA, @CCUSTO

    WHILE @@FETCH_STATUS = 0
    BEGIN

    IF @CCONTA <> '' THEN
    BEGIN
    SET @CCONTA_ANT = @CCONTA
    SET @CCUSTO_ANT = @CCUSTO
    END

    IF @CCONTA = '' THEN
    BEGIN
    IF @CCONTA <> '' THEN
    BEGIN
    UPDATE T_R_CE0406 SET CCUSTO = @CCUSTO_ANT, CCONTA = @CCONTA_ANT WHERE CODIGO = @CODIGO
    END

    PRINT 'ATUALIZADO COD:'+CAST(@CODIGO AS VARCHAR)+' - CCONTA:'+@CCONTA_ANT+' - CCUSTO:'+@CCUSTO_ANT)
    END



    FETCH NEXT FROM T_R_CE0406_Cursor INTO @CODIGO, @CCONTA, @CCUSTO
    END;
    CLOSE T_R_CE0406_Cursor;
    DEALLOCATE T_R_CE0406_Cursor;
    GO

    HARYSOHN
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 12246
    Registrado : 01/03/2011

    Re: [Resolvido]Preencher campos em branco com informações do último registro não null

    Mensagem  HARYSOHN em Qui 08 Set 2011, 18:24

    Sua Solução:


    Private Sub btnAtualizar_Click()
    Dim Db As DAO.Database 'Declaração DAO para o banco de dados
    Dim Rs As DAO.Recordset 'Declaração para o RecordSet
    Dim ws As DAO.Workspace 'Declaração para o Workspace
    Dim StrSql As String 'Variável que receberá a SQL
    Dim StrTMP As Double 'Variável que armazenará o numero que será atualizado nos proximos campos null

    Set ws = DBEngine.Workspaces(0) 'Seta o Workspace
    Set Db = ws.OpenDatabase(CurrentProject.Path & "\BDExemplo.accdb", False, False, "MS Access;PWD=senha") 'Seta o BD aplicando o caminho, observe que tem que conter o nome do banco de dados

    StrSql = "SELECT * FROM TblExemplo" 'Carrega a variável StrSql com a SQL da tabela
    Set Rs = Db.OpenRecordset(StrSql) 'Seta o recordset para abrir com a SQL

    If Rs.RecordCount = 0 Then 'Se não existe registro no recordset exibe a mensagem abaixo
    MsgBox "sem registro selecionado", vbInformation, "Atenção"
    Else 'Caso contrário prosegue o código aplicando na variável StrTMP o valor zero
    StrTMP = 0

    Do While Not Rs.EOF

    If IsNull(Rs!Campo1) = True Then 'O codigo será executado em loop's sequenciais, armazenando o valor do campo1 na variável StrTMP, caso o proximo registro seja nulo, atualiza o registro com a variável StrTMP que é justamente o registro anterior, agindo assim sucessivamente enquanto houver registros nulos, cessando quando o registro seguinte contiver nova numeração, ai carrega novamente a variável StrTMP com o valor do Campo1 e prossegue novamente, em encontrado registro nulo, atualiza.. e assim sucessivamente
    CurrentDb.Execute "UPDATE TblExemplo SET Campo1= '" & StrTMP & "' WHERE Código =" & Rs!Código & ";"
    Else
    StrTMP = Rs!Campo1 'Caso o proximo registro não seja nulo, carrega novamente a variável com o valor não nulo seguinte

    End If

    Rs.MoveNext 'Vai ao proximo registro do Recordset
    Loop 'Executa o Loop

    'Exibe mensagem ao final da atualização
    MsgBox "Atualizado com Sucesso!", vbInformation, "Atualizado"
    End If
    End Sub


    [Você precisa estar registrado e conectado para ver este link.]


    Abra o BD.. antes de executar.. abra a tebela e observe como está, depois execute o botão e observe novamente a tabela


    Saudações


    .................................................................................
    PILOTO
    الله أكبر Paz, Justiça e Liberdade! الله أكبر
    CLIQUE AQUI E VEJA O VÍDEO >>> BIOMETRIA EM ACCESS

    Iniciando no Access? Então veja esse tópico e também esse


    BUSCA NO FÓRUM - CLIQUE AQUI!!!

    Quando tua dúvida for RESOLVIDA, dê retorno com AGRADECIMENTO a aqueles que gastaram seu tempo em te ajudar.
    Clique no botão Resolvido logo acima do botão Enviar, do lado direito. Todos nós agradecemos.  
    [Você precisa estar registrado e conectado para ver esta imagem.]

    dbragion
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 12
    Registrado : 05/09/2011

    Obrigado Harysohn

    Mensagem  dbragion em Qui 08 Set 2011, 19:19

    Funcionou perfeitamente, acabei de executar em uma tabela de mais de 200 mil linhas com 2 colunas para serem preenchidas.

    Muito Obrigado.

    Pensei em colocar uma barra de progresso pois, por serem várias linhas demorou cerca de uns 3 minutos. Achei interessante para o usuário não pensar que o access travou. vc pode me ajudar?

    Vc sabe onde posso conseguir material para estudar + sobre programação em vba para access?
    (obs: tem alguma forma de eu pontuá-lo positivamente aqui no fórum pela ajuda prestada?)

    Saudações,

    Daniel

    HARYSOHN
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 12246
    Registrado : 01/03/2011

    Re: [Resolvido]Preencher campos em branco com informações do último registro não null

    Mensagem  HARYSOHN em Qui 08 Set 2011, 19:38

    Não há diferença entre os que ajudam amigão.. todos o fazemos de bom grado...
    O importante é que conseguimos resolver...

    Sobre barra de progresso, há exemplos aqui no fórum sobre barra de progresso...

    No tópico abaixo se não me engano na mensagem de numero 16, há um exemplo que adaptei para um colega...

    [Você precisa estar registrado e conectado para ver este link.]

    No Fórum temos literatura sobre access...


    Bom estudo e Sucesso!


    So faltou colocar o resolvido ai no tópico amigão.


    .................................................................................
    PILOTO
    الله أكبر Paz, Justiça e Liberdade! الله أكبر
    CLIQUE AQUI E VEJA O VÍDEO >>> BIOMETRIA EM ACCESS

    Iniciando no Access? Então veja esse tópico e também esse


    BUSCA NO FÓRUM - CLIQUE AQUI!!!

    Quando tua dúvida for RESOLVIDA, dê retorno com AGRADECIMENTO a aqueles que gastaram seu tempo em te ajudar.
    Clique no botão Resolvido logo acima do botão Enviar, do lado direito. Todos nós agradecemos.  
    [Você precisa estar registrado e conectado para ver esta imagem.]

    Assis
    Maximo VIP
    Maximo VIP

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 2746
    Registrado : 06/11/2009

    Re: [Resolvido]Preencher campos em branco com informações do último registro não null

    Mensagem  Assis em Qui 08 Set 2011, 19:40

    Hary

    Boa tarde

    Versão 2003 por favor...
    Obrigado


    .................................................................................
    *** Só sei que nada sei ***

    HARYSOHN
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 12246
    Registrado : 01/03/2011

    Re: [Resolvido]Preencher campos em branco com informações do último registro não null

    Mensagem  HARYSOHN em Qui 08 Set 2011, 19:43

    Boa tarde Assis...

    2003

    [Você precisa estar registrado e conectado para ver este link.]

    Cumprimentos.


    .................................................................................
    PILOTO
    الله أكبر Paz, Justiça e Liberdade! الله أكبر
    CLIQUE AQUI E VEJA O VÍDEO >>> BIOMETRIA EM ACCESS

    Iniciando no Access? Então veja esse tópico e também esse


    BUSCA NO FÓRUM - CLIQUE AQUI!!!

    Quando tua dúvida for RESOLVIDA, dê retorno com AGRADECIMENTO a aqueles que gastaram seu tempo em te ajudar.
    Clique no botão Resolvido logo acima do botão Enviar, do lado direito. Todos nós agradecemos.  
    [Você precisa estar registrado e conectado para ver esta imagem.]

    Assis
    Maximo VIP
    Maximo VIP

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 2746
    Registrado : 06/11/2009

    Re: [Resolvido]Preencher campos em branco com informações do último registro não null

    Mensagem  Assis em Qui 08 Set 2011, 20:05

    Hary

    Obrigado


    .................................................................................
    *** Só sei que nada sei ***

    dbragion
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 12
    Registrado : 05/09/2011

    Hary, obrigado

    Mensagem  dbragion em Qui 08 Set 2011, 23:40

    obrigado pela dica!

    dbragion
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 12
    Registrado : 05/09/2011

    Harysohn..

    Mensagem  dbragion em Qui 08 Set 2011, 23:51

    vi o tópico e baixei o modelo, é realmente excelente!

    Mas pra mim existe ainda uma distância muito grande em ver pronto e conseguir copiar, será que posso contar com sua ajuda + uma vez?


    HARYSOHN
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 12246
    Registrado : 01/03/2011

    Re: [Resolvido]Preencher campos em branco com informações do último registro não null

    Mensagem  HARYSOHN em Sex 09 Set 2011, 00:13

    Abra o tópico e fale sua duvida.. poste os dois exemplos.. não apenas eu como os demais certamente ajudarão..

    Cumprimentos


    .................................................................................
    PILOTO
    الله أكبر Paz, Justiça e Liberdade! الله أكبر
    CLIQUE AQUI E VEJA O VÍDEO >>> BIOMETRIA EM ACCESS

    Iniciando no Access? Então veja esse tópico e também esse


    BUSCA NO FÓRUM - CLIQUE AQUI!!!

    Quando tua dúvida for RESOLVIDA, dê retorno com AGRADECIMENTO a aqueles que gastaram seu tempo em te ajudar.
    Clique no botão Resolvido logo acima do botão Enviar, do lado direito. Todos nós agradecemos.  
    [Você precisa estar registrado e conectado para ver esta imagem.]

    igor.pereira.br
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 7
    Registrado : 14/01/2014

    Re: [Resolvido]Preencher campos em branco com informações do último registro não null

    Mensagem  igor.pereira.br em Seg 26 Maio 2014, 19:57

    Boa tarde amigos,

    Tesntei adaptar o código para minha necessidade, para isso mudei o tipo da variável StrTMP para String mas não funcionou. simplismente não atualiza os dados.

    Os amigos tem alguma sugestão?


    ID CLIENTE
    1 A
    2
    3 B
    4
    5
    6 C
    7
    Código:
    Private Sub btnAtualizar_Click()
    Dim Db As DAO.Database
    Dim Rs As DAO.Recordset
    Dim ws As DAO.Workspace
    Dim StrSql As String
    Dim StrTMP As String

    Set ws = DBEngine.Workspaces(0)
    Set Db = CurrentDb()

    StrSql = "SELECT * FROM TblExemplo"
    Set Rs = Db.OpenRecordset(StrSql)

    If Rs.RecordCount = 0 Then
            MsgBox "sem registro selecionado", vbInformation, "Atenção"
    Else
    StrTMP = "teste"
     
    Do While Not Rs.EOF

        If IsNull(Rs!CLIENTE) = True Then
            CurrentDb.Execute "UPDATE TblExemplo SET CLIENTE= '" & StrTMP & "'  WHERE ID =" & Rs!ID & ";"
        Else
            StrTMP = Rs!CLIENTE

        End If

    Rs.MoveNext
    Loop
    MsgBox "Atualizado com Sucesso!", vbInformation, "Atualizado"
    End If
    End Sub

    Alexandre Neves
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 5890
    Registrado : 05/11/2009

    Re: [Resolvido]Preencher campos em branco com informações do último registro não null

    Mensagem  Alexandre Neves em Seg 26 Maio 2014, 20:11

    Boa tarde,
    Se disponibilizar dados significativos é melhor para analisar


    .................................................................................
    Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
    Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
    Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
    Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo

    igor.pereira.br
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 7
    Registrado : 14/01/2014

    Re: [Resolvido]Preencher campos em branco com informações do último registro não null

    Mensagem  igor.pereira.br em Seg 26 Maio 2014, 21:15

    boa tarde Alexandre,

    Acabei conseguindo adaptar agora!

    Obrigado!


      Data/hora atual: Sab 10 Dez 2016, 13:43