Access - Mayusculas y minusculas

 
Vista:
Imágen de perfil de Francesc

Mayusculas y minusculas

Publicado por Francesc (68 intervenciones) el 18/10/2013 07:39:16
Buenos días,
Estoy puliendo una BD y en los campos de Nombre en la tbl Socios me ha surgido el siguiente problema que no se resolver, bien en parte si pero no tal y como manda la normativa. Con la siguiente instrucción en después de actualizar en el formulario de entrada de datos:
Private Sub NOM_AfterUpdate()
NOM = StrConv(NOM, vbProperCase)
End Sub
El tema funciona, pero en el caso de un nombre compuesto como por ejemplo Maria de los Angeles, este código escribe Maria De Los Angeles que dá dolor de ojos pensando en la normativa.
Sabe alguien como resolverlo, he buscado en el foro pero no localizo la solución-
Gracias por anticipado,
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Rubén

Mayusculas y minusculas

Publicado por Rubén (13 intervenciones) el 18/10/2013 12:57:15
Hola, Fracesc:

Yo he tenido que pelearme con un problema similar, y al final lo que hice fue una función, así muy "a pinrel", con la que comprobar, para cada registro de la tabla, esas cadenas sueltas, y reemplazarlas por los equivalentes con minúsculas.
(Si no te apetece programarlo, también puedes hacerlo de forma medio automática, medio manual con la función de buscar y reemplazar de Access... ;-)
Lo que buscaba no era tanto el "Del" o "Y", sino más bien " Del " o " Y ", rodeado de espacios, para aseguarme que era la palabra entera y no el comienzo (o final, o medio) de otra.
Aunque, ojo, puedes tener casos en los que el artículo sí tenga que ir en mayúsculas... pero bueno, como norma general te vas a evitar un montón de correcciones a mano.
Un saludo,

Rubén

P.D.: También te recomiendo que hagas algo similar que busque en los registros grupos de más de un espacio, y que los substituya por uno sólo, así como recortar espacios iniciales y finales.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Francesc

Mayusculas y minusculas

Publicado por Francesc (68 intervenciones) el 18/10/2013 21:53:00
Buenas noches, Ruben,

Buscando y leyendo por ahí he localizado el siguiente código pero no me funciona, aunque entiendo que es la solución. Aquí va el código:

Function PrimLetraMay(Texto As String) As String
Dim X As Long
Dim AnteriorEsEspacio As Boolean
Dim Particulas(5) As String
Dim Y As Long
Dim Z As Long

Particulas(1) = " De "
Particulas(2) = " Del "
Particulas(3) = " La "
Particulas(4) = " Y "
Particulas(5) = " Los "
' Particulas(6) = " NUEVA PARTICULA "

AnteriorEsEspacio = True
For X = 1 To Len(Texto)
If Mid(Texto, X, 1) <> " " And AnteriorEsEspacio = True Then
PrimLetraMay = PrimLetraMay & UCase(Mid(Texto, X, 1))
Else
If Mid(Texto, X, 1) = " " And AnteriorEsEspacio = True Then
Else
PrimLetraMay = PrimLetraMay & LCase(Mid(Texto, X, 1))
End If
End If

If Mid(Texto, X, 1) = " " Then
AnteriorEsEspacio = True
Else
AnteriorEsEspacio = False
End If
Next X

For X = 1 To 5 'Número de partículas.
Z = 1
Y = InStr(Z, PrimLetraMay, Particulas(X))
Do While Y > 0
PrimLetraMay = Left(PrimLetraMay, Y - 1) & LCase(Particulas(X)) & Right(PrimLetraMay, 1 + Len(PrimLetraMay) - Y - Len(Particulas(X)))
Z = Y + 1
Y = InStr(Z, PrimLetraMay, Particulas(X))
Loop
Next X
End Function

Está escrita por un tal CarCar, pero no consigo que funcione. No se si la aplico en un momento incorrecto en el formulario de entrada de datos.
Puedes echarle una ojeada e indicarme cual imaginas es el problema?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Francesc

Mayusculas y minusculas

Publicado por Francesc (68 intervenciones) el 20/10/2013 16:03:58
Buenas tardes a todos,

Por un lamentable error de principiante no conseguia que la función actuara, era tan simple como compilarla y no pensaba en ello. Si funciona con el añadido en el campo del formulario de introducción de datos en el evento al actualizar el siguiente código:


Function PrimLetraMay(Texto As String) As String
Dim X As Long
Dim AnteriorEsEspacio As Boolean
Dim Particulas(5) As String
Dim Y As Long
Dim Z As Long

Particulas(1) = " De "
Particulas(2) = " Del "
Particulas(3) = " La "
Particulas(4) = " Y "
Particulas(5) = " Los "
' Particulas(6) = " NUEVA PARTICULA "


AnteriorEsEspacio = True
For X = 1 To Len(Texto)
If Mid(Texto, X, 1) <> " " And AnteriorEsEspacio = True Then
PrimLetraMay = PrimLetraMay & UCase(Mid(Texto, X, 1))
Else
If Mid(Texto, X, 1) = " " And AnteriorEsEspacio = True Then
Else
PrimLetraMay = PrimLetraMay & LCase(Mid(Texto, X, 1))
End If
End If

If Mid(Texto, X, 1) = " " Then
AnteriorEsEspacio = True
Else
AnteriorEsEspacio = False
End If
Next X

For X = 1 To 5 'Número de partículas.
Z = 1
Y = InStr(Z, PrimLetraMay, Particulas(X))
Do While Y > 0
PrimLetraMay = Left(PrimLetraMay, Y - 1) & LCase(Particulas(X)) & Right(PrimLetraMay, 1 + Len(PrimLetraMay) - Y - Len(Particulas(X)))
Z = Y + 1
Y = InStr(Z, PrimLetraMay, Particulas(X))
Loop
Nex
End Function


Private Sub Texto14_AfterUpdate()
Me.Texto14 = PrimLetraMay(Me.Texto14)
End Sub
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Rubén

Mayusculas y minusculas - Función de cambio que reconoce palabras "plenas"

Publicado por Rubén (13 intervenciones) el 23/10/2013 10:07:07
Hola otra vez:

Por si fuera de interés, te paso una función de reemplazo de palabras que me había hecho y que puede emplearse para el caso que nos ocupa.
Lo que hace es buscar en la cadena que le pasamos por la variable "cadea" la palabra que le indicamos en "cadea1", que distingue por varios tipos de separadores: espacios, comas, puntos, guiones... o los que tú le definas (argumento opcional).
Esa palabra la cambia por la indicada en "cadea2".

Un saludo,

Rubén



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
Public Function CambiaPalabraPlena(cadea As String, cadea1 As String, cadea2 As String, Optional separador As String) As String
'CambiaPalabraPlena V1.0
'(c) Rubén Castiñeiras Lorenzo, 2013
'Para una cadena dada, busca la cadena expresada en cadea1, que deberá
'estar delimitada por los separadores que incluye la variable de ese nombre,
'o por los que se indiquen en la variable "separador"
'y la substituye por la indicada en cadea2.  
'Devuelve la cadena inicial así corregida
'Se llama a si misma, de modo recursivo, por si existiesen varias ocurrencias de cadea1
 
Dim caracter As String
Dim trozo As String
Dim longo As Integer
Dim longo1 As Integer
Dim i As Integer
Dim inicio As Integer
Dim fin As Integer
Dim conta As Integer
Dim separadores As String
 
Dim cadeafinal As String
Dim resto As String
 
longo = Len(cadea)
longo1 = Len(cadea1)
 
i = 1
inicio = 1
fin = 1
conta = 0
separadores = " ,;.-_()[]{}"
trozo = ""
resto = ""
 
If Not IsNull(separador) Then
    If separador <> "" Then separadores = separador
End If
 
'Buscamos sólo la primera ocurrencia de cadea1
'llamamos a la función de forma recursiva con el resto de la cadena inicial
Do While i <= longo
    caracter = Mid(cadea, i, 1)
    If InStr(separadores, caracter) > 0 Or i = longo Then
        fin = i
        If i = longo Then fin = fin + 1
        trozo = Mid(cadea, inicio, fin - inicio)
        If trozo = cadea1 Then
            cadeafinal = Left(cadea, inicio - 1) & cadea2
            If fin + longo1 < longo And i < longo Then
                resto = Right(cadea, longo - fin + 1)
                cadeafinal = cadeafinal & CambiaPalabraPlena(resto, cadea1, cadea2, separadores)
                i = longo
            Else
                cadeafinal = cadeafinal & Right(cadea, longo - fin + 1)
            End If
            conta = conta + 1
        End If
        inicio = fin + 1
    End If
    i = i + 1
Loop
 
If conta = 0 Then cadeafinal = cadea
 
CambiaPalabraPlena = cadeafinal
 
 
End Function
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Francesc

Mayusculas y minusculas - Función de cambio que reconoce palabras "plenas"

Publicado por Francesc (68 intervenciones) el 23/10/2013 14:27:46
Buenas tardes, Ruben,

Mucho mejor, muchas gracias. Tiene más posibilidades.

Saludos,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Rubén

Mayusculas y minusculas - Función de cambio que reconoce palabras "plenas"

Publicado por Rubén (13 intervenciones) el 25/10/2013 09:55:54
Como siempre, se cuelan los gremlins: acabé pegando la versión mala de la función.
Esta es la CORRECTA:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
Public Function CambiaPalabraPlena(cadea As String, cadea1 As String, cadea2 As String, Optional separador As String) As String
'CambiaPalabraPlena V1.0
'(c) Rubén Castiñeiras Lorenzo, 2013
'Para una cadena dada, busca la cadena expresada en cadea1,
'que deberá estar separada por los separadores que incluye la
'variable de ese nombre, o por los que se indiquen en "separador",
'Devuelve la cadena inicial así corregida
'Se llama a si misma, de modo recursivo, por si existiesen varias ocurrencias de cadea1 
 
Dim caracter As String
Dim trozo As String
Dim longo As Integer
Dim longo1 As Integer
Dim i As Integer
Dim inicio As Integer
Dim fin As Integer
Dim Conta As Integer
Dim separadores As String
 
Dim cadeafinal As String
Dim resto As String
 
longo = Len(cadea)
longo1 = Len(cadea1)
 
i = 1
inicio = 1
fin = 1
Conta = 0
separadores = " ,;.-_()[]{}"
trozo = ""
resto = ""
 
If Not IsNull(separador) Then
    If separador <> "" Then separadores = separador
End If
 
cadeafinal = cadea
 
'Buscamos sólo la primera ocurrencia de cadea1 y llamamos
'a la función de forma recursiva con el resto de la cadena inicial
Do While i <= longo
    caracter = Mid(cadeafinal, i, 1)
    If InStr(separadores, caracter) > 0 Or i = longo Then
        fin = i
        If i = longo Then fin = fin + 1
        trozo = Mid(cadeafinal, inicio, fin - inicio)
        If trozo = cadea1 Then
            cadeafinal = Left(cadeafinal, inicio - 1) & cadea2
            If fin + longo1 < longo And i < longo Then
                resto = Right(cadea, longo - fin + 1)
                cadeafinal = cadeafinal & CambiaPalabraPlena(resto, cadea1, cadea2, separadores)
                i = longo
            Else
                cadeafinal = cadeafinal & Right(cadea, longo - fin + 1)
            End If
            Conta = Conta + 1
        End If
        inicio = fin + 1
    End If
    i = i + 1
Loop
 
If Conta = 0 Then cadeafinal = cadea
 
CambiaPalabraPlena = cadeafinal
 
 
End Function
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar