Foro VBATotal
Aprender a programar en Visual Basic
Crear registros secuenciados de manera masiva
Cita de aul100 en 29 de noviembre de 2023, 14:08Hola, saludos cordiales.
Apreciado profesor.
Soy seguidor suyo y con sus publicaciones he aprendido bastante. Le ofrezco las gracias por la oportunidad de postear esta petición a través de su magnífico foro.
Me atrevo a solicitarle de favor que me conceda una solución con la que se pueda generar una numeración o serie tipo: B0123456789.
Contexto:
Tengo una tabla (TComprobantes) con un campo llamado “Comprobante” del tipo string, en el que almaceno series que incluyen una letra B y una numeración, que va en aumento siempre. Lo que deseo es que, desde un formulario con dos cuadros de textos, se pueda crear una secuencia a partir de una numeración inicial hasta una final, que a través de un botón de comando se genere esa secuencia y se inserte de inmediato de manera masiva en la tabla. De manera que, si dijera hay que crear 10 comprobantes desde el B0000000101 al B0000000110, que al decirle en el formulario dónde debe comenzar y dónde terminar, que la función proceda a crear e insertar en la tabla esos comprobantes para tenerlos disponibles y poder usarlos a conveniencia desde otro formulario.
De igual forma podría ser que solo se le pase o se le diga desde un cuadro de texto el comprobante inicial y la cantidad que a partir de ese se desean, y entonces se creen e inserten dichos comprobantes en la tabla.
Ojalá haya podido explicarme bien con este caso. Le he adjuntado dos ficheros, un pdf con algunas ideas y una .accdb con el esquema que complementa las ideas plasmadas en el pdf.
Agradecería mucho su colaboración.
Gracias anticipadas.
Hola, saludos cordiales.
Apreciado profesor.
Soy seguidor suyo y con sus publicaciones he aprendido bastante. Le ofrezco las gracias por la oportunidad de postear esta petición a través de su magnífico foro.
Me atrevo a solicitarle de favor que me conceda una solución con la que se pueda generar una numeración o serie tipo: B0123456789.
Contexto:
Tengo una tabla (TComprobantes) con un campo llamado “Comprobante” del tipo string, en el que almaceno series que incluyen una letra B y una numeración, que va en aumento siempre. Lo que deseo es que, desde un formulario con dos cuadros de textos, se pueda crear una secuencia a partir de una numeración inicial hasta una final, que a través de un botón de comando se genere esa secuencia y se inserte de inmediato de manera masiva en la tabla. De manera que, si dijera hay que crear 10 comprobantes desde el B0000000101 al B0000000110, que al decirle en el formulario dónde debe comenzar y dónde terminar, que la función proceda a crear e insertar en la tabla esos comprobantes para tenerlos disponibles y poder usarlos a conveniencia desde otro formulario.
De igual forma podría ser que solo se le pase o se le diga desde un cuadro de texto el comprobante inicial y la cantidad que a partir de ese se desean, y entonces se creen e inserten dichos comprobantes en la tabla.
Ojalá haya podido explicarme bien con este caso. Le he adjuntado dos ficheros, un pdf con algunas ideas y una .accdb con el esquema que complementa las ideas plasmadas en el pdf.
Agradecería mucho su colaboración.
Gracias anticipadas.
Archivos subidos:- Tienes que conectarte para acceder a las subidas.
Cita de Administrador en 30 de noviembre de 2023, 09:19Buenas,
Creo que la segunda opción es mejor, sobre todo porque a la hora de rellenar el campo inicial y final puedes cometer algún error con la numeración. Rellenando solo la numeración del campo inicial la probabilidad de equivocarse se reduce a la mitad 😉
Como todos los comprobantes van a empezar por la letra B, es mejor no incluirla en el campo y así nos quedamos con un número siendo más fácil de trabajar. En caso de querer incluir la B, tendrías que separar la cadena usando un right para quedarte solo con el valor numérico.
Este es el código a implementar:
Private Sub CmdCrearComprobantes_Click()
'Definición de variables
Dim dbs As DAO.Database
Dim comprobantesSQL As StringSet dbs = CurrentDb()
'Desactivamos mensajes de aviso
DoCmd.SetWarnings False
'Establecemos variables de inicio y fin
comproban = Form!Numeroinicial
Final = comproban + Total
'Bucle con el que vamos insertando comprobantes en la tabla
For i = comproban To Final
comprobantesSQL = "INSERT INTO TComprobantes ([Comprobante]) VALUES ('" & comproban & "')"
DoCmd.RunSQL comprobantesSQL
comproban = comproban + 1
Next
'Activamos mensajes de aviso
DoCmd.SetWarnings True
End Sub
Te adjunto el archivo funcionando.
Saludos.
Buenas,
Creo que la segunda opción es mejor, sobre todo porque a la hora de rellenar el campo inicial y final puedes cometer algún error con la numeración. Rellenando solo la numeración del campo inicial la probabilidad de equivocarse se reduce a la mitad 😉
Como todos los comprobantes van a empezar por la letra B, es mejor no incluirla en el campo y así nos quedamos con un número siendo más fácil de trabajar. En caso de querer incluir la B, tendrías que separar la cadena usando un right para quedarte solo con el valor numérico.
Este es el código a implementar:
Private Sub CmdCrearComprobantes_Click()
'Definición de variables
Dim dbs As DAO.Database
Dim comprobantesSQL As String
Set dbs = CurrentDb()
'Desactivamos mensajes de aviso
DoCmd.SetWarnings False
'Establecemos variables de inicio y fin
comproban = Form!Numeroinicial
Final = comproban + Total
'Bucle con el que vamos insertando comprobantes en la tabla
For i = comproban To Final
comprobantesSQL = "INSERT INTO TComprobantes ([Comprobante]) VALUES ('" & comproban & "')"
DoCmd.RunSQL comprobantesSQL
comproban = comproban + 1
Next
'Activamos mensajes de aviso
DoCmd.SetWarnings True
End Sub
Te adjunto el archivo funcionando.
Saludos.
Archivos subidos:- Tienes que conectarte para acceder a las subidas.
Cita de aul100 en 30 de noviembre de 2023, 21:29Hola, maestro…
Muchísimas gracias por la solución, funciona perfecto.
Con lo del uso de la “B” delante, lo he solucionado atendiendo a sus sugerencias.
Queda demostrado, usted es un maestro. Soluciones prácticas con el mínimo de código.
Reciba un fuerte abrazo.
Hola, maestro…
Muchísimas gracias por la solución, funciona perfecto.
Con lo del uso de la “B” delante, lo he solucionado atendiendo a sus sugerencias.
Queda demostrado, usted es un maestro. Soluciones prácticas con el mínimo de código.
Reciba un fuerte abrazo.
Cita de Administrador en 1 de diciembre de 2023, 11:30De nada.
Para cualquier cosa, por aquí andamos.
Saludos.
De nada.
Para cualquier cosa, por aquí andamos.
Saludos.