** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - Ayuda en Access, =Max
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoAyuda en Access, =Max

 Responder Responder
Autor
Mensaje
ronis10 Ver desplegable
Nuevo
Nuevo
Avatar

Unido: 14/Octubre/2020
Localización: CR
Estado: Sin conexión
Puntos: 6
Enlace directo a este mensaje Tema: Ayuda en Access, =Max
    Enviado: 14/Octubre/2020 a las 08:09
Necesito ayuda en Access 2016 con el comando =Max

Tengo una table de productos (Tabla 1) con un autonumerado indice y un sub indice (Codigo) donde hay 8 categorías que informan donde esta almacenado el producto. 
Cada categoria inicia con una letra seguida de numeros. Ej
m001 f001 h001 k001
m002 f002 h002 k002
m003 f003 h003 k003
. . . .
. . . .
. . . .

El caso es que para cada producto nuevo necesito saber cual es el ultimo registro m(x+1), f(x+1), etc

ALGUIEN ME PUEDE AYUDAR ?
IRC
Arriba
xavi Ver desplegable
Administrador
Administrador
Avatar
Terrassa-BCN

Unido: 10/Mayo/2005
Localización: Catalunya ||||
Estado: Sin conexión
Puntos: 14720
Enlace directo a este mensaje Enviado: 14/Octubre/2020 a las 09:09
Hola ronis10 y bienvenido al foro,

No se como andas de VBA pero, por aquello de enseñar a pescar en lugar de dar peces, aquí va la lista de "ingredientes" para obtener lo que buscas

- Función DMax aplicando el criterio adecuado. Operador Like
- Función Mid para eliminar la parte del valor obtenido que no sea numérica
- Función CInt para convertir el valor a entero (opcional)
- Función Format para formatear el nuevo valor al formato deseado

Prueba y nos cuentas. Si te atascas, explícanos dónde.

Un saludo
Xavi, un minyó de Terrassa

Mi web
Arriba
rokoko Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 16/Febrero/2008
Localización: Pamplona
Estado: Sin conexión
Puntos: 3062
Enlace directo a este mensaje Enviado: 14/Octubre/2020 a las 10:38
Hola

Me ha venido bien para practicar, hace lo que quieres, pero no se si la forma de conseguirlo es como quieres....

Fijate en la consulta los pasos que voy dando,la idea la he sacado de Xavi claro.....
La funcion la he ido armando poco a poco en diferentes campos de la consulta, pero access que es demasido listo me ha eliminado los campos no necesarios......asi que queda solo el que vale

SELECT Max(CLng(Right([Codigo],Len([Codigo])-1))+1) AS CombiertoNumeroY_Sumo1, Left([Codigo],1) AS SacoLetra
FROM Tabla1
GROUP BY Left([Codigo],1)
HAVING (((Left([Codigo],1))=[Formularios]![Formulario1]![ccLetras]));

Lo que esta en negrita lo que hace es quitar la letra, pasarlo a numero, sacar el mas grande y sumarle 1. Y lo que esta en rojo es el filtro para la letra. Aislo la letra que es la primera y la filtro desde un formulario.

Quizas haya una forma mas facil y ortodoxa de sacarla, pero mi nivel da para esto...

El ejemplo
https://www.dropbox.com/s/wrajzj4oyrm8j6p/FiltrarLetrasYSumarNumero.rar?dl=0

Max(CLng(Right([Codigo],Len([Codigo])-1))+1)

Con Len saco la longitud del codigo menos 1
Con Right combinado con len aislo los numeros(que son letras), pillo los 3 de la derecha de la letra
Con CLng paso esos numeros con cero que en realidad son texto a numero entero, 001 por ejemplo quedaria 1
Max me da en numero mas grande
y para terminar a ese numero le sumo 1

Y con format le doy el formato que quiero ponindolela letra al principio que corresponde, esto en el codigo del boton. A partir de hay tu ya metes ese codigo donde quieras.....

No he utilizado casi nada de codigo vba, pero si he jugado con diferentes funciones para sacar lo que quiero en la consulta


Editado por rokoko - 14/Octubre/2020 a las 10:44
Arriba
xavi Ver desplegable
Administrador
Administrador
Avatar
Terrassa-BCN

Unido: 10/Mayo/2005
Localización: Catalunya ||||
Estado: Sin conexión
Puntos: 14720
Enlace directo a este mensaje Enviado: 14/Octubre/2020 a las 11:01
Hola,

Solo una puntualización: si voy a tomar de una cadena de texto solo a partir de un determinado carácter hasta el final de la cadena, no necesito calcular su distancia para utilizar la función Right; el tercer argumento de la función MID es opcional. En caso de dejarlo vacío tomará todos los caracteres a partir del indicado en el segundo argumento.

PD: me alegro que sirva para practicar. Yo lo habría hecho con una función (por eso de la reutilización) y una sola línea de código. A ver que saca quien preguntó.

Un saludo
Xavi, un minyó de Terrassa

Mi web
Arriba
rokoko Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 16/Febrero/2008
Localización: Pamplona
Estado: Sin conexión
Puntos: 3062
Enlace directo a este mensaje Enviado: 14/Octubre/2020 a las 11:42
Cierto! la funcion Mid la he utilizado poco y no la controlaba bien, quedaria asi

CombiertoNumeroY_Sumo1: Máx(CLargo(Medio([Codigo];2))+1)
Arriba
ronis10 Ver desplegable
Nuevo
Nuevo
Avatar

Unido: 14/Octubre/2020
Localización: CR
Estado: Sin conexión
Puntos: 6
Enlace directo a este mensaje Enviado: 14/Octubre/2020 a las 19:06
Rokoko y Xavi

Chicos, ambas respuestas asustan a un lego, pero le hechare ganas mas tarde y les tendre informados de mi avance.
Les gradezco su interés y ayuda...
IRC
Arriba
hipromark Ver desplegable
Habitual
Habitual
Avatar

Unido: 18/Julio/2016
Localización: Caracas
Estado: Sin conexión
Puntos: 71
Enlace directo a este mensaje Enviado: 14/Octubre/2020 a las 20:56
Hola Ronis, pues si te pierdes mucho con el código, tal vez habría una forma de hacerlo sin código. Básicamente tendrías que guardar el último valor en una tabla temporal, esta tabla la creas con un query tipo create table, luego con otro query puedes ver el último registro.

Ahora todo depende de en que momento necesites saberlo, si es algo dinámico que te debe mostrar de inmediato el código y seguir avanzando o si es sólo que te informe cada vez que abras un formulario, es decir, dependiendo de lo avanzado de la funcionalidad podrías hacerlo sin código o con código.

Déjanos saber más detalles para ver si te serviría la opción que te propongo
Arriba
ronis10 Ver desplegable
Nuevo
Nuevo
Avatar

Unido: 14/Octubre/2020
Localización: CR
Estado: Sin conexión
Puntos: 6
Enlace directo a este mensaje Enviado: 14/Octubre/2020 a las 22:11

He qui lo que he logrado…

  1. Clic en Crear/Diseño de Consulta”
  2. Cierro “Mostrar tabla”
  3. Clic en boton “SQL” y copio:

SELECT Max(CLng(Right([Codigo],Len([Codigo])-1))+1) AS CombiertoNumeroY_Sumo1, Left([Codigo],1) AS SacoLetra

FROM Tabla1

GROUP BY Left([Codigo],1)

HAVING (((Left([Codigo],1))=[Formularios]![Formulario1]![ccLetras]));

  1. Clic en “Ejecutar”, se abre ventana “Introduzca el valor del parámetro” … Formularios!Formulario1!ccLetras
  2. Introduzco un valor alfa de acuerdo al campo Codigo, ejemplo “d”; lo que genera una tabla-consulta con una línea con el valor deseado a la izquierda con el código alfa a la derecha. TRABAJA !!!

 

EL PROBLEMA:  No puedo cambiar el valor Alfa a menos que haga clic “SQL” y “Ejecutar” e introduzca otra letra

 Ahora, he creado una consulta para cada letra (8 en total) pero me imagino que ha de haber una forma en que pueda ver todos a la vez o un formulario en donde introduzca la letra y me de el valor numerico…

Perdón por la arrogancia de pedir más… ya es un asunto de estética

 😊

IRC
Arriba
rokoko Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 16/Febrero/2008
Localización: Pamplona
Estado: Sin conexión
Puntos: 3062
Enlace directo a este mensaje Enviado: 14/Octubre/2020 a las 22:26
Arriba te he puesto un enlace a dropbox con un ejemplo, creo que no lo has visto.....
Arriba
ronis10 Ver desplegable
Nuevo
Nuevo
Avatar

Unido: 14/Octubre/2020
Localización: CR
Estado: Sin conexión
Puntos: 6
Enlace directo a este mensaje Enviado: 15/Octubre/2020 a las 20:16
Listo,
Anoche lo baje y copie lo mejor que pude pero aun me da algunos problemas.
Hoy trato de nuevo y te informo
Gracias por tu ayuda... de verdad muy valiosa
IRC
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable