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]Excluir último carater de um campo

    Compartilhe

    ilvecchio
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 125
    Registrado : 16/11/2012

    [Resolvido]Excluir último carater de um campo

    Mensagem  ilvecchio em Qua 21 Maio 2014, 15:24

    Buenas!
    Preciso verificar o último caracter de um campo memorando e, se não for número, letra, acentos e pontuação, enfim, Chr(33) a Chr(128), excluí-lo.
    A verificação deve se repetir até que todos os carateres desejados não existam mais.

    Na tabela tenho um campo texto de identificação de registro (ProcessoNr) e o campo memorando Observacao.
    Para excluir espaços duplos , uso este código que, mil perdões, não lembro de quem recebi:

    -------------------------------------------------------------------

    Acabado = 5
    Set BD = CurrentDb

    Do While Acabado > 0
    With BD
    .Execute "UPDATE TabTeste SET [MeuCampo]=Replace([MeuCampo]);' ',' ');"

    Acabado = Acabado - 1

    End With
    Loop
    -------------------------------------------------------------------

    Consegui identificar o caracter assim:

    Dim BD As Database
    Dim TipoCaracter As integer
    Dim mSQL
    Set mSQL = CurrentDb.OpenRecordset("SELECT Observacao FROM TabObservacao")
    TipoCaracter = Chr(Right(mSQL!Observacao , 1))


    Preciso, agora, percorrer toda a tabela e substituir o último caracter quando atender à condição.

    Algo como:

    Select case TipoCaracter
    Case 33 to 128
    ' não faz nada

    Case else
    'substituir o caracter por "" (nada)
    daqui prá frente não sei fazer.


    Agradeço a ajuda.














    good guy
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 920
    Registrado : 05/02/2010

    Excluir último carater de um campo

    Mensagem  good guy em Qua 21 Maio 2014, 17:30

    Olá Ilvechio,

    Você tentou utilizar a função InStr para localizar o caracter desejado? com essa função integrada com a função Replace acredito que vc consiga o seu objetivo. É só uma sugestão. Posta o bd aí pra gente fazer alguns testes, o tópico é interessante.

    ilvecchio
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 125
    Registrado : 16/11/2012

    Re: [Resolvido]Excluir último carater de um campo

    Mensagem  ilvecchio em Qua 21 Maio 2014, 19:51

    Buenas, good guy!
    Eu não sei qual é o caracter.
    Pode ser quebra de linha, espaço e outros não identificáveis porque não aparecem. Então, tudo que vier após o último caracter visível e que pode ser impresso, vai ser excluído.

    good guy
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 920
    Registrado : 05/02/2010

    Excluir último carater de um campo

    Mensagem  good guy em Qua 21 Maio 2014, 20:38

    Consegui com esta consulta atualização. Lembrando que o nome da tabela e do campo são fictícios.

    UPDATE SuaTabela SET SeuCampo = Trim(Left(SeuCampo,Len(SeuCampo)-1));"





    Última edição por good guy em Qua 21 Maio 2014, 22:22, editado 1 vez(es)

    ilvecchio
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 125
    Registrado : 16/11/2012

    Re: [Resolvido]Excluir último carater de um campo

    Mensagem  ilvecchio em Qua 21 Maio 2014, 22:12

    Se eu fizer desse jeito, vou perder o último caractere do texto visível: que pode ser um número, uma letra, um ponto (esse pode), etc.
    A identificação do carater vai ser dada por TipoCaracter = Chr(Right(mSQL!Observacao , 1)) .

    Uma vez identificado verifico se ele está entre Chr(33) e Chr(128): Sim, mantenho, Não, excluo.
    Não consegui fazer o loop.

    good guy
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 920
    Registrado : 05/02/2010

    Excluir último carater de um campo

    Mensagem  good guy em Qua 21 Maio 2014, 22:25

    Você teria então de criar uma condição dentro desta consulta que atenda esta situação. Tente com IIf's. Tenho que ir agora, se alguém mais puder ajudar ...

    Bem, estudei melhor a situação, já que você tem um código que identifica o caracter indesejado, vai ter que criar um select case ou if then..else..end if para verificar todo tipo de caracter indesejado.

    Exemplo de código:


    Código:
    Dim BD As Database
     Dim TipoCaracter As integer
     Dim mSQL As DAO.Recordset

     Set mSQL = CurrentDb.OpenRecordset("SELECT Observacao FROM TabObservacao")
     TipoCaracter = Chr(Right(mSQL!Observacao , 1))

    Do While Not mSQL.EOF
    Select case TipoCaracter
     Case is = "&"
     TipoCaracter= Chr(Right(mSQL!Observacao,1))
     Observacao = Replace(Observacao,TipoCaracter,"")
      
     Case is = "$"
     TipoCaracter= (Chr(Right(mSQL!Observacao,1))
     Observacao = Replace(Observacao,TipoCaracter,"")

     End Select
    Loop
     

    good guy
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 920
    Registrado : 05/02/2010

    Excluir último carater de um campo

    Mensagem  good guy em Qui 22 Maio 2014, 21:19

    Olá ilvechio,

    Consegui assim: Primeiro você filtra todos os registros com o último caracter desejado a partir de uma combobox com todos os caracteres possíveis.

    Código:

    Private Sub cboSimbolo_AfterUpdate()
    'Código de Eduardo V. Machado (Good Guy)- Máximo Access
    Dim TypeCharacter
    Dim s
    s = "" & cboSimbolo.Column(1) & ""

    TypeCharacter = s
    Me.RecordSource = "SELECT * FROM TabObservacao WHERE Right(Observacao,1) = '" & TypeCharacter & "'"
    End Sub

    Em seguida você elimina o último caracter de todos os registros filtrados que contenham este último caracter indicado na combobox.

    Private Sub Comando0_Click()
    On Error Resume Next
    'Código de Eduardo V. Machado (Good Guy)- Máximo Access

    Dim rs As DAO.Recordset
    Dim y As String
    Dim TypeCharacter
    Dim k As String

    Set rs = CurrentDb.OpenRecordset("TabObservacao", dbOpenTable)


    y = Left(Observacao, Len(Observacao) - 1)

    TypeCharacter = Right(Observacao, 1)

    k = Me.cboSimbolo.Column(1)


    If TypeCharacter = k Then
    Observacao = y
    DoCmd.RunCommand acCmdRecordsGoToNext
    Else
    Exit Sub
    End If

    rs.Close

    'Se o algoritmo funcionou, então encerro o tratamento de erro
    Exit_TratareiErro:
    Exit Sub

    'Se algo inesperado acontecer e impedir o correto funcionamento do algoritmo
    'Então disparo o tratamento de erro
    TratareiErro:
    MsgBox "Aconteceu falha neste processamento." _
     & vbCrLf & "Trata-se do erro n°: " & Err.Number _
     & vbCrLf & "Descrição: " & Err.Number, vbInformation, "Erro inesperado"

    Exit Sub


    Set rs = Nothing

    Crie também um botão para desativar o filtro:

    Private Sub cmDesativar_Click()
    Me.RecordSource = "SELECT * FROM TabObservacao"
    End Sub

    Anexos
    ExcluiDigitoFinal.zip
    Você não tem permissão para fazer download dos arquivos anexados.
    (27 Kb) Baixado 2 vez(es)


    Última edição por good guy em Ter 03 Jun 2014, 16:43, editado 5 vez(es)

    ilvecchio
    Intermediário
    Intermediário

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 125
    Registrado : 16/11/2012

    Re: [Resolvido]Excluir último carater de um campo

    Mensagem  ilvecchio em Seg 26 Maio 2014, 14:06

    Buenas!
    Good guy, obrigado pelo teu empenho. Mas desisti do problema. O Access não está reconhecendo o caracter de espaço corretamente. Vou ver se consigo a alteração com quem me fornece a tabela (vem de outro sistema).

      Data/hora atual: Dom 04 Dez 2016, 12:08