Generar un número de registros en una tabla según criterios especificados desde formulario

necesito crear registros en una tabla según valores que especifico desde un formulario. La tabla contiene solo 3 campos: [contador], [articulo] y [color]. La idea es que yo especifique valores en 3 controles, [nº de registros], [ValorInicialContador] y [valorFinalContador] y al apretar un botón, el código genere el número de registros especificado en el control [nº de registros] y que contenga en el campo [artículo] un valor fijo que yo habré especificado, y en el campo [color] irá un número incremental que será igual en cada grupo de registros generados. Pongo un ejemplo porque ni yo me aclaro con lo que estoy escribiendo:

[nº de registros]= 10;   [ValorInicialContador]="0001";   [ValorFinalContador]="0200";  [Artículo]="T473".

Al apretar el botón, el código debería generar:

10 registros que contengan:[contador] = del 1 al 10; [artículo]="T473";  [color]="0001"

10 registros siguientes [contador]= del 11 al 20; [artículo]="T473"; [color]="0002"

10 registros siguientes [contador]= del 21 al 30; [artículo]="T473"; [color]="0003"

y así progresivamente hasta el [color]="0200"

Creo que con el ejemplo ha quedado bastante claro y lo comprendo hasta yo, que ya es decir. Agradecería enormemente vuestra ayuda ya que este proceso lo he de repetir muchas veces y como comprenderéis es supertedioso

Respuesta
1

Prepárate a escribir. En el formulario crea un botón(no tiene porque ser así, lo puedes poner en cualquier evento, pero es más cómodo) y en sus propiedades-eventos-al hacer clic crea un procedimiento de evento y escribe

 DoCmd.SetWarnings False
Dim i As Integer
For i = 1 To 10
DoCmd.RunSQL "insert into [copia de articulos](contador,articulo,color) values(" & i & ",""t743"",""0001"")"
Next i
For i = 11 To 20
DoCmd.RunSQL "insert into [copia de articulos](contador,articulo,color)values(" & i & ",""t743"",""0002"")"
Next i

Y así sucesivamente

En el caso que el número de registros que hay que repetir lo pongas en un cuadro de texto, llamado, por ejemplo Valor, el código quedaría así

DoCmd.SetWarnings False
Dim i As Integer
For i = 1 To Me.Vale
DoCmd.RunSQL "insert into [copia de articulos](contador,articulo,color) values(" & i & ",""t743"",""0001"")"
Next i
For i = ((Me.Vale) + 1) To (Me.Vale) * 2
DoCmd.RunSQL "insert into [copia de articulos](contador,articulo,color)values(" & i & ",""t743"",""0002"")"
Next i

Etcétera

Siendo Copia de artículos el nombre de la tabla donde quieres insertar.

También puedes ponerlo como

DoCmd.SetWarnings False
Dim i As Integer
For i = 1 To 200
Select Case i
Case 1 To 10
DoCmd.RunSQL "insert into [copia de articulos](contador,articulo,color) values(" & i & ",""t743"",""0001"")"
Case 11 To 20
DoCmd.RunSQL "insert into [copia de articulos](contador,articulo,color)values(" & i & ",""t743"",""0002"")"
Case 21 To 30
DoCmd.RunSQL "insert into [copia de articulos](contador,articulo,color)values(" & i & ",""t743"",""0003"")"

Case is 31 to...

End Select
Next i

Hola Icue, perdona por haber tardado tanto en contestar pero es que hoy he tenido un día de perros y no he tenido ocasión hasta ahora.

He leído tu respuesta y creo que no has pillado bien el sentido de mi pregunta ya que tal como planteas la solución, me resulta más laborioso escribir todo este código que entrar todos los registros directamente en la tabla. La culpa es mía por no haber planteado la pregunta bien y además, la he complicado innecesariamente ya que en realidad el campo [contador] no lo necesito, y por lo que veo, condiciona mucho tu solución.

apollandome en tu código, he hecho una modificación introduciendo un segundo bucle for next anidado y he solucionado el problema,  ya que así se generan todos los registros que necesito de un tirón y partiendo de los 4 datos que introduzco en el formulario[valorinicial], [valorfinal],[nº de copias] y [codart]. Te pongo el código que ha quedado para que lo veas.

Private Sub Comando9_Click()
DoCmd.SetWarnings False
Dim i As Integer
Dim x As Integer
For x = Me.INICIAL To Me.FINAL
For i = 1 To Me.copias
DoCmd.RunSQL "insert into [tabla numeraciones](orden,codart,color) values(" & i & ",[codart]," & x & ")"
Next i
Next x

End Sub

Te agradezco mucho tu ayuda, ya que sin ella no hubiese sido capaz de solucionarlo. Y ya puestos aprovecho para hacerte otra pregunta al respecto de este mismo problema: se trata de que el campo [color] me lo genera en formato numérico (1, 2, 3,) y así sucesivamente hasta el final y lo que necesito es que me genere el número pero en formato texto y siempre de 4 digitos rellenando de ceros por la derecha (0001, 0002, 0003, 0004, etc). (me serviría ejecutando una consulta de actualización después de generar la tabla).Te agradecería si pudieras dedicarme un poquito más de tu tiempo.

Saludos.

Estaba de viaje. Prueba con adaptar esto

DoCmd.RunSQL "insert into [tabla numeraciones](orden,codart,color) values(" & i & ",""t743"", '" & Format(x, "0000") & "')"

Eso sí, acuérdate de poner en la tabla, el campo color como texto y longitud 4.

Hola de nuevo Icue, he probado tu modificación y sigue sin funcionar. no hace nada. he consultado con otros expertos y me dan la misma solución que tú, por lo que estoy seguro que la solución es correcta pero algo hay que no pita. si te parece te dejo un enlace a una copia de la base de datos para que le des un vistazo. ya me dirás. Saludos.

https://drive.google.com/file/d/0B2GWWPjeYPkBVUp1U08tUmxrUXM/view?usp=sharing 

Si hubieras mirado bien la instrucción que te puse verías que antes y después de las comillas de format... había un apóstrofe.

Como ya tienen registros las tablas, además de poner los apóstrofes, para cosas posteriores, pon un botón en el formulario y en sus propiedades-eventos-al hacer clic

docmd.runsql"update [copia 2....] set color =format([color,""0000"")"

docmd.runsql"update [tabla numeraciones] set lo mismo

Después de actualizar las tablas borras el botón y listo.

Gracias por confiar en lo que aconsejo. A los médicos, etc, les encanta que el cliente les diga que han pedido una segunda opinión.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas