MaximoAccess

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

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 : 132
    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.













    avatar
    good guy
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 976
    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 : 132
    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.
    avatar
    good guy
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 976
    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 : 132
    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.
    avatar
    good guy
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 976
    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
     
    avatar
    good guy
    Developer
    Developer

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 976
    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 : 132
    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: Seg 26 Jun 2017, 18:22