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


3 participantes

    [Resolvido]AddNew não faz o registro na última linha do Access

    avatar
    tiagozms
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 8
    Registrado : 12/04/2017

    [Resolvido]AddNew não faz o registro na última linha do Access Empty [Resolvido]AddNew não faz o registro na última linha do Access

    Mensagem  tiagozms 2/12/2017, 12:06

    Estou tendo um problema com um sistema que criei no Vba/Excel + Access.

    Sempre que dou um AddNew numa tabela do Access de numeração automática os registros são feitos normalmente na última linha.
    Porém algumas tabelas que não usam numeração automática, quando os registros são adicionados, (as vezes) não ficam na última linhas.
    Exemplo: Se eu tiver 10 usuários cadastrados e quero cadastrar o 11º, ele é inserido em outra linha.
    Percebi que geralmente acontece quando eu excluo uma linha via código vba ou outro código que se move dentro da tabela.
    Mesmo eu usando o MoveLast antes do AddNew, o problema persiste.

    O mais intrigante:
    Se eu fechar o Excel/vba, o problema persiste até mesmo dentro do próprio Access.
    Exemplo: Se eu abrir o Access digitar na última linha que é a linha 10, e atualizar a Tabela, os dados são movidos para outra linha que pode ser a 2, 3, 4, 5, etc. como se o próprio Access estivesse com a posição memorizada e persiste em não sair de lá.  

    Alguém sabe como posso resolver?
    cleverson_manaus
    cleverson_manaus
    VIP
    VIP


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1022
    Registrado : 23/09/2011

    [Resolvido]AddNew não faz o registro na última linha do Access Empty Re: [Resolvido]AddNew não faz o registro na última linha do Access

    Mensagem  cleverson_manaus 2/12/2017, 13:02

    Bom dia,

    Recomendo vc não usar a numeração automática, já que está usando VBA, adicione a sequência via VBA quando usar a propriedade ADDNEW

    Vc encontar muitos exemplos aqui no fórum.



    .................................................................................
    afro

    "É fazendo que se aprende a fazer aquilo que se deve aprender a fazer."(Aristóteles)
    - Dúvida resolvida!!! Marcar o tópico como resolvido!!!
    avatar
    tiagozms
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 8
    Registrado : 12/04/2017

    [Resolvido]AddNew não faz o registro na última linha do Access Empty Re: [Resolvido]AddNew não faz o registro na última linha do Access

    Mensagem  tiagozms 2/12/2017, 13:31

    Cleverson, o meu sistema é multiusuário, são várias máquinas rodando na rede e por isso a Numeração Automática é a mais indicada para o meu caso e como falei acima, nunca tive problemas.
    A minha dúvida não diz respeito a isso.
    Como falei acima, o meu problema está nas tabelas de Log e de Usuários onde eu não preciso de numeração. Tudo que preciso é que os registros sejam feitos um abaixo do outro e vale lembrar que tudo funciona perfeitamente e que do nada o AddNew começa a adicionar em outra posição de linha do Access e que o mesmo problema acontece se eu adicionar os registros diretamente no Access (sem código).
    cleverson_manaus
    cleverson_manaus
    VIP
    VIP


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1022
    Registrado : 23/09/2011

    [Resolvido]AddNew não faz o registro na última linha do Access Empty Re: [Resolvido]AddNew não faz o registro na última linha do Access

    Mensagem  cleverson_manaus 2/12/2017, 13:57

    Então devemos analisar os campos que fazem o relacionamento entre essas tabelas.

    Vc talvez já esteja dando a resposta, se deseja uma ordem ou sequência dos dados precisa informar um campo para essa finalidade.

    Podendo postar uma parte do BD já ajuda a todos que queiram ajudar.


    .................................................................................
    afro

    "É fazendo que se aprende a fazer aquilo que se deve aprender a fazer."(Aristóteles)
    - Dúvida resolvida!!! Marcar o tópico como resolvido!!!
    avatar
    tiagozms
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 8
    Registrado : 12/04/2017

    [Resolvido]AddNew não faz o registro na última linha do Access Empty Re: [Resolvido]AddNew não faz o registro na última linha do Access

    Mensagem  tiagozms 2/12/2017, 15:05

    BD:

    o nome do banco de dados é: bd_documentos.mdb

    Tabelas com problema:

    tb_log
    Colunas: Data, Hora, Local, Acao

    tb_usuario
    Colunas: Usuario, Nivel, Senha, StatusSenha, PNome, SNome, Matricula, Secretaria, Funcao, Departamento

    Todas as colunas acima estão como "texto curto", apenas criei e não mexi em nada de suas propriedades.

    Código VBA para adicionar usuário e Log ao mesmo tempo:
    Código:
    Sub AdicionarNovoUsuario()

    'Adiciona um novo usuário no botão Adicionar do frm_usuarios
    If frm_usuarios.txtNome.Text = "" Or frm_usuarios.txtSNome.Text = "" Or frm_usuarios.txtUsuario.Text = "" Or frm_usuarios.txtMatricula.Text = "" Or frm_usuarios.txtFuncao.Text = "" Or frm_usuarios.txtDepartamento.Text = "" Then
    msgbox "Preencha todos os campos", vbExclamation, "Erro"
    frm_usuarios.txtNome.SetFocus

    Else
    ' O código abaixo pesquisa se o nome a ser adicionado já existe.
    Dim NomePesq As String
    Dim strSQL As String
    Dim ChecaNome

    NomePesq = frm_usuarios.txtUsuario.Text
    strSQL = "SELECT * FROM tb_usuario WHERE Usuario LIKE '" & NomePesq & "'"
    Call Conectar

    Set ConsuUsuario = Banco.OpenRecordset(strSQL)
    On Error Resume Next

    While Not ConsuUsuario.EOF
    ChecaNome = ConsuUsuario(0) 'Esta variável recebe o nome da pesquisa (caso o encontre) e no código abaixo é submetido a uma condição.
    ConsuUsuario.MoveNext

    Wend

    If ChecaNome = frm_usuarios.txtUsuario Then
    Dim ChecaDuplicidadeUser
    ChecaDuplicidadeUser = frm_usuarios.txtUsuario.Text
    msgbox "Já existe usuário com o nome " & ChecaDuplicidadeUser & ". Digite outro nome.", vbCritical, "Erro"
    frm_usuarios.txtUsuario.BackColor = &HC0C0FF
    frm_usuarios.txtUsuario.SetFocus
    Else

    ConsuUsuario.MoveLast

    ConsuUsuario.AddNew
    ConsuUsuario!Usuario = frm_usuarios.txtUsuario.Text
    ConsuUsuario!Nivel = "P"
    ConsuUsuario!Senha = "t1986"
    ConsuUsuario!StatusSenha = "N/C"
    ConsuUsuario!PNome = frm_usuarios.txtNome.Text
    ConsuUsuario!SNome = frm_usuarios.txtSNome.Text
    ConsuUsuario!Matricula = frm_usuarios.txtMatricula.Text
    ConsuUsuario!Secretaria = "SEDUC"
    ConsuUsuario!Funcao = frm_usuarios.txtFuncao.Text
    ConsuUsuario!Departamento = frm_usuarios.txtDepartamento.Text
    ConsuUsuario.Update

    msgbox "Adicionado com sucesso", vbInformation

         '----- LOG -----
            Dim userLogado
            Dim userAdicionado
            
            userLogado = frm_usuarios.lbUsuarioLogado.Caption
            userAdicionado = frm_usuarios.txtUsuario.Text
                  
            ConsuTbLog.AddNew
            ConsuTbLog!Data = Date
            'o código abaixo exibe a hora no formato ideal.
            Dim Hora
            Hora = Format(Time, "hh:mm")
            ConsuTbLog!Hora = Hora
            
            ConsuTbLog!Acao = "O usuário " & userLogado & " adicionou o usuário " & userAdicionado
            ConsuTbLog!Local = frm_principal.lbNomeMaquina.Caption
            ConsuTbLog.Update
            '-----------------

    End Sub


    Código para remover todos os usuários menos a primeira linha que é do Desenvolvedor.

    Código:
    Private Sub btRemoverTudo_Click()

    'btRemoverTudo.Enabled = False

    If lbCont.Caption = 1 Then
    Exit Sub
    Else


    If msgbox("---------- ATENÇÃO ---------- " + vbCrLf + vbCrLf + "Todos os usuários serão apagados! Tem certeza que deseja apagar tudo? ", vbYesNo, "Remover") = vbYes Then

    On Error Resume Next

    ConsuUsuario.MoveFirst 'move para a primeira linha
    ConsuUsuario.MoveNext 'pula uma linha para evitar apagar a conta de Desenvolvedor que é a primeira.

    While Not ConsuUsuario.EOF

    ConsuUsuario.Delete
    ConsuUsuario.MoveNext

    Wend

    ConsuTbLog.MoveLast


        '----- LOG -----
            Dim userLog
                    
            userLog = lbUsuarioLogado.Caption
                            
            ConsuTbLog.AddNew
            ConsuTbLog!Data = Date
            'o código abaixo exibe a hora no formato ideal.
            Dim Hora
            Hora = Format(Time, "hh:mm")
            ConsuTbLog!Hora = Hora
            
            ConsuTbLog!Acao = "O usuário " & userLog & " removeu todas as contas de usuários."
            ConsuTbLog!Local = frm_principal.lbNomeMaquina.Caption
            ConsuTbLog.Update
            

    txtUsuarioSelect.Text = ""
    Call acaoBotoesUsuarios

    Call AtualizaListViewUsuario

    Else

    txtUsuarioSelect.Text = ""
    Call acaoBotoesUsuarios

    End If
    End If

    End Sub


    Código para remover apenas um usuário:

    Código:
    Private Sub bot_remover_Click()
    Dim RemovePesq As String
    Dim RemoveSql As String
                
    If txtUsuarioSelect.Text = "" Then
       Exit Sub
       Else
            
            RemovePesq = txtUsuarioSelect.Text
                  
           If msgbox("Tem certeza que deseja remover " & RemovePesq & "?", vbYesNo, "Remover") = vbYes Then
            
            RemoveSql = "SELECT * FROM tb_usuario WHERE Usuario LIKE '" & RemovePesq & "'"

            Call Conectar
            
            Set ConsuUsuario = Banco.OpenRecordset(RemoveSql)

            On Error Resume Next
                              
                ConsuUsuario.Delete
                ConsuUsuario.MoveLast
                AtualizaListViewUsuario
                msgbox "Usuário removido com sucesso!", vbInformation, "Exclusão"
                lbCont.Caption = ListView1.ListItems.Count
                            
                '----- LOG -----
            Dim userLog
            Dim userSelect
            
            userLog = lbUsuarioLogado.Caption
            userSelect = txtUsuarioSelect
                    
            ConsuTbLog.AddNew
            ConsuTbLog!Data = Date
            'o código abaixo exibe a hora no formato ideal.
            Dim Hora
            Hora = Format(Time, "hh:mm")
            ConsuTbLog!Hora = Hora
            
            ConsuTbLog!Acao = "O usuário " & userLog & " removeu a conta de " & userSelect
            ConsuTbLog!Local = frm_principal.lbNomeMaquina.Caption
            ConsuTbLog.Update
            '-----------------
                
                txtUsuarioSelect.Text = ""
                Call acaoBotoesUsuarios
                
                
                'Call LimpaItensUsuarios
                            
                Else
                txtUsuarioSelect = ""
                Call acaoBotoesUsuarios
                End If
                
    End If

    End Sub


    Última edição por tiagozms em 2/12/2017, 15:14, editado 1 vez(es)
    Alvaro Teixeira
    Alvaro Teixeira
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 7996
    Registrado : 15/03/2013

    [Resolvido]AddNew não faz o registro na última linha do Access Empty Re: [Resolvido]AddNew não faz o registro na última linha do Access

    Mensagem  Alvaro Teixeira 2/12/2017, 15:13

    Olá a todos,

    Tiago, não será apenas uma questão de "ordenação".

    Efetue remover filtros e ordenações na tabela e verifique.

    Abraço
    avatar
    tiagozms
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 8
    Registrado : 12/04/2017

    [Resolvido]AddNew não faz o registro na última linha do Access Empty Re: [Resolvido]AddNew não faz o registro na última linha do Access

    Mensagem  tiagozms 2/12/2017, 16:00

    Realmente parece ser um problema de ordenação pois o problema acontece mesmo sem usar códigos (diretamente no Access), mas não estou conseguindo resolver.

    Vou mandar o link do meu banco de dados para quem poder me ajudar.

    Acessem a tabela bd_usuarios e tentem criar um registro na última linha e depois atualizem o BD. Vocês vão observar que ele não fica na última linha.

    Link para baixar o BD
    Alvaro Teixeira
    Alvaro Teixeira
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 7996
    Registrado : 15/03/2013

    [Resolvido]AddNew não faz o registro na última linha do Access Empty Re: [Resolvido]AddNew não faz o registro na última linha do Access

    Mensagem  Alvaro Teixeira 2/12/2017, 17:45

    Olá a todos,

    Tiago, não me parece ter ordenação, no entanto verifiquei que faz o que descreveu.
    A menos que algum colega tenha uma solução, sou da opinião de seguir a recomendação do colega Cleverson.
    Criar ID, mesmo que não utilize resolve a questão.

    Outra coisa, a menos que necessite mesmo assim, vi campos a dizer data do tipo Texto com tamanho 255, precisa mesmo assim?
    Caso não, reveja a modelagem das suas tabelas.

    Abraço
    avatar
    tiagozms
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 8
    Registrado : 12/04/2017

    [Resolvido]AddNew não faz o registro na última linha do Access Empty Consegui resolver!

    Mensagem  tiagozms 2/12/2017, 23:46

    Agradeço a todos. Não precisei usar numeração automática nas tabelas que citei.
    O problema foi resolvido depois que usei o MoveLast no final de todos os códigos que se relacionavam com as respectivas tabelas, inclusive após o código que carrega a ListView como no exemplo abaixo:

    Código:
    While Not ConsuTbLog.EOF

    Set List = frm_log.ListView1.ListItems.Add(Text:=ConsuTbLog(0)) ' Data
        List.SubItems(1) = ConsuTbLog!Hora 'Hora
        List.SubItems(2) = ConsuTbLog!Local 'Local
        List.SubItems(3) = ConsuTbLog!Acao 'Acao
        
        ConsuTbLog.MoveNext
          
        Wend
        
        ConsuTbLog.MoveLast
    cleverson_manaus
    cleverson_manaus
    VIP
    VIP


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 1022
    Registrado : 23/09/2011

    [Resolvido]AddNew não faz o registro na última linha do Access Empty Re: [Resolvido]AddNew não faz o registro na última linha do Access

    Mensagem  cleverson_manaus 2/12/2017, 23:51


    Muito bem,


    A máxima continua valendo: "Neste mundo de programação o céu é o limite"

    Bem, acho que seria isso.

    Não esqueça de marcar o tópico como resolvido.

    Abraços


    .................................................................................
    afro

    "É fazendo que se aprende a fazer aquilo que se deve aprender a fazer."(Aristóteles)
    - Dúvida resolvida!!! Marcar o tópico como resolvido!!!
    avatar
    tiagozms
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 8
    Registrado : 12/04/2017

    [Resolvido]AddNew não faz o registro na última linha do Access Empty Re: [Resolvido]AddNew não faz o registro na última linha do Access

    Mensagem  tiagozms 3/12/2017, 02:18

    Verdade! Nos meus primeiros códigos em vba/access, aprendi muito com o pessoal aqui do MA.
    Problema resolvido, obrigado a todos!
    Alvaro Teixeira
    Alvaro Teixeira
    Moderador Global
    Moderador Global


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 7996
    Registrado : 15/03/2013

    [Resolvido]AddNew não faz o registro na última linha do Access Empty Re: [Resolvido]AddNew não faz o registro na última linha do Access

    Mensagem  Alvaro Teixeira 3/12/2017, 13:18

    cheers

    Conteúdo patrocinado


    [Resolvido]AddNew não faz o registro na última linha do Access Empty Re: [Resolvido]AddNew não faz o registro na última linha do Access

    Mensagem  Conteúdo patrocinado


      Data/hora atual: 22/11/2024, 00:33