En este grupo En todos

Foro de Access



tratamiento registros consecutivos

JAVIER
Ciencias economicas y empresariales un...
Escrito por Javier Del Coso
el 28/10/2009

Hola Abraham,
En primer lugar, mi agradecimiento, a tí, y al resto de personas del foro, pues vuestras orientaciones y consejos, me han sido siempre de mucha utilidad.
Dicho esto,
Os planteo una cuestión que me traba, y por exigencias de plazo, no tengo tiempo de trabajármelo.
Necesito conseguir una consulta en access con las siguientes características:
Tengo tabla access, uno de los campos es un códido de identificación personal, que aquí en España es un código alfanumérico, según en tipo de titular.
Mi pregunta es la siguiente.-
Puedo extraer la parte numérica de este código.
A partir de ésto, mi objetivo es analizar, y concretrar, el número, en este campo en particular, de números consecutivos que puedan haber, creo que con mis limatados conocimientos, me llevaría un tiempo de indagación, que no me puedo permitir
Si fuera una cosa puntual, me las apañaría con excel, pero lo preciso integrar en un access que ya hice tiempo
GRACIAS ANTICIPADAS.
SOYS UNOS FENÓMOENOS.

Juan Cots
Valencia, España
Escrito por Juan Cots
el 28/10/2009

Hola Javier.
dependiendo de como sea la cadena alfanumérica puede ser muy sencillo o un poco más complicado:

Por ejemplo si se tratara de DNI. - algo como 25369874W, bastaría con poner algo así en un nuevo campo de la consulta:

numeros: Val([nombrecampo])
Luego ordenamos ascendente por ese campo y podrías ver los consecutivos con facilidad.

Ahora bien si se trata de caracteres intercalados entonces yo lo haría de la siguiente forma.

Añades un nuevo módulo al que puedes llamar por ejemplo modNumeros.
Le pegas lo siguiente:
Public Function dejarNumeros(cadenaTexto As String) As String
Const listaNumeros = "0123456789"
Dim cadenaTemporal As String
Dim i As Integer
cadenaTexto = Trim$(cadenaTexto)
If Len(cadenaTexto) = 0 Then
Exit Function
End If
cadenaTemporal = ""
For i = 1 To Len(cadenaTexto)
If InStr(listaNumeros, Mid$(cadenaTexto, i, 1)) Then
cadenaTemporal = cadenaTemporal + Mid$(cadenaTexto, i, 1)
End If
Next
dejarNumeros = cadenaTemporal
End Function

Lo guardas.

Ahora en la consulta igual que haciamos antes, añadimos un campo nuevo y le ponemos

Numeros: dejarNumeros([nombrecampo])

En ambos casos solo hay que sustituir nombrecampo por el nombre real del campo que contiene el valor alfanumérico

Un saludo

Javier Del Coso
Ciencias economicas y empresariales un...
Escrito por Javier Del Coso
el 29/10/2009

Muchas gracias,
Mis intentos se basaban también en un "for next", pero sin éxito.
Mi primera impresión sobre tu consejo es que va funcionar, lo voy a intentar pues es mucho más sencillo que lo fueron mis intentos.
Te reitero mi agradecimiento, por la prontitud de tu respuesta y lo acertado de tus orientaciones.
Recibe un cordial saludo,
Javier

Javier Del Coso
Ciencias economicas y empresariales un...
Escrito por Javier Del Coso
el 01/11/2009

Hola Juan,

He puesto en práctica tu sugerencia, y me ha sido de mucha utilidad para extraer el valor numérico de cadenas alfanuméricas de distinta naturaleza en un campo, ( este caso NIF, CIF NIE)

Pero mi primera consulta, iba orientada no en la línea de ordenar y ver los consecutivos. Sino a determinar dentro de una lista de miles de registros, aquellos registros en los que este campo tiene otro registro con un valor consecutivo y determinar cuales y cuantas veces existen valores consecutivos.

Con excel, lo haría, ordenando y restando cada registro con anterior, y filtrado aquellos cuya diferencia sea 1.

Estoy intentando trasladar esto access, pero ahora sin éxito. No consigo operar el campo entre distintos registros.

No se si podrías orientarme.

Gracias de nuevo.

Recibe un cordial saludo,

Javier

Juan Cots
Valencia, España
Escrito por Juan Cots
el 03/11/2009

Hola Javier.

No es difícil pero a ver si soy capaz de explicarme bien.
Para que funcione correctamente tienes que tener un campo que nos numere la consulta una vez ya ordenada.
eso lo puedes conseguir desde este enlace:
Https://accessvbafaq.mvps.org/item. Asp? Pagina=67

Una vez realizada la consulta y numerada, la ponemos en vista diseño, añadimos un nuevo campo y le ponemos:

resta: SiInm(IsError([dni]-DBúsq("dni";"NombreConsulta";"RegNum= " & RegNum]-1));0;[dni]-DBúsq("dni";"NombreConsulta";"RegNum = " & [RegNum]-1))

Partiendo de la base de que:

RegNum es el nuevo campo de ordenación que has obtenido aplicando el consejo del enlace que te he puesto.
dni es el nombre del campo de la consulta en la que obtienes el valor numerico del mismo
NombreConsulta es el nombre de la consulta en la que obtienes el valor dni

Si no te aclaras lo comentas (porque la verdad es que no me aclaro ni yo)

Un saludo

Javier Del Coso
Ciencias economicas y empresariales un...
Escrito por Javier Del Coso
el 06/11/2009

Hola Juan,
He de darte la razón, creo que no me explico bien.
La premura que necesitaba en este asunto, no me ha pemitido tiempo para estudiarlo en detenimiento.
Al final, opté por una opción que me funcionó y que coincide creo en esencia con tu planteamiento.
Lo que hize fue, después de obtener la parte numérica del campo alfanumerico, ordenar y alimentar una tabla con este campo y con un campo autonumérico, de tal manera que restando ambos campos, y contando los iguales, obtengo lo que deseaba.
Cuando tenga un poco de tiempo, probaré tu última sugerencia que como todas las tuyas son siempre acertadas.
Siento no explicarme mejor, pero estoy sometido a una presión y plazos muy exigentes, que no permiten la tranquilidad necesaria para estudiar los temas, habida cuenta también de la limitación de mis conocimientos.
Qiero decirte, no obstante, que tus consejos me han resultado de extraordinaria utilidad, sobre todo para desatascarme en cosas que por mi mismo me llevaría un tiempo que por desgracia no dispongo.
Muchísimas gracias.
Recibe un cordial saludo,
Javier