Access - Actualizar grupo de registros aleatoriamente Access VBA

 
Vista:
sin imagen de perfil
Val: 4
Ha disminuido su posición en 18 puestos en Access (en relación al último mes)
Gráfica de Access

Actualizar grupo de registros aleatoriamente Access VBA

Publicado por scontacto (2 intervenciones) el 18/07/2018 02:39:41
Hola a todos en el foro. Es posible actualizar grupos de registros aleatoriamente? es decir, que se ejecute una función y dentro de un Recordset de 1000 registros, primero actualice 5 registros, asignando al campo CODLFA un consecutivo numérico, luego actualice 7 registros asignando el siguiente, luego actualice 3 registros etc.?

Lo estoy viendo mediante este código, pero no logro adaptar la variable de aleatoriedad (LRandomNumber ) en el procedimiento. Gracias por sus respuestas.


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
' Código
' ------ >>
Private Sub CmdActualizaCod_Click()
Dim DB As DAO.Database
Dim SQL As String
Dim vFacIni As Double
Dim RsLFA As DAO.Recordset
Dim LRandomNumber As Integer
 
SQL = "SELECT * FROM F_LFA_ABRIL WHERE FECHA BETWEEN # " & Format(Me.TxtFechaIni, "mm/dd/yyyy") & _
"# AND #" & Format(Me.TxtFechaFin, "mm/dd/yyyy") & "#"
 
vFacIni = Me.TxtInicial.Value
 
Set DB = CurrentDb
Set RsLFA = DB.OpenRecordset(SQL, dbOpenDynaset)
RsLFA.MoveFirst '
vFacIni = Me.TxtInicial ' El codigo de documento con el que debe iniciar a actualizar CODLFA
LRandomNumber = Int((10 - 1 + 1) * Rnd + 1) ' El numero de registros a actualizar (Aleatorio)
 
Do While Not RsLFA.EOF
RsLFA.Edit
RsLFA.CODLFA = "" ' Campo a actualizar
RsLFA.Update
 
' Estoy lanzando un Msgbox para verificar que se recorra correctamente
MsgBox "Art?culo : " & RsLFA!CODART & " - " & RsLFA!DESLFA & "Doc No. " & vFacIni & " Registro Aleatorios : " & LRandomNumber
RsLFA.MoveNext
vFacIni = vFacIni + 1 ' Aumento en uno (1) el código a actualizar
LRandomNumber = Int((10 - 1 + 1) * Rnd + 1) ' El número de registros a actualizar (Aleatoriamente)
Loop
 
RsLFA.Close
Set RsLFA = Nothing
Set DB = Nothing
 
End Sub
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

Actualizar grupo de registros aleatoriamente Access VBA

Publicado por Anonimo (3397 intervenciones) el 18/07/2018 11:03:34
Ese código es confuso,

Se abre un recordset con una serie de registros (cualquiera que sea)
A partir de un referente (un cuadro de texto del formulario) se intenta modificar un numero aleatorio de registros, tras ello se genera otro numero aleatorio para modificar a este numero de registros con el valor (incrementado) del referente en el formulario.

Ello requiere DOS bucles, uno que recorra los registros
-- dentro de el --
Uno que modifique al numero de registros que se han obtenido de forma aleatoria

Este segundo bucle (el interno) debería 'detectar' si hay suficientes registros para ser actualizados (si se supera el numero total de registros disponibles) para evitar provocar un error de 'fuera de rango'.

Si aceptamos como valido el DO … Loop (para recorrer al conjunto total de registros)
Necesitamos un clásico FOR …. Next (que nos actualizaría el aleatorio numero de registros, esto es a ese subconjunto)


Espero que con estas indicaciones, puedas lograr el éxito, a mayores …. reiniciar cada vez la aleatoriedad, no va a genera mas aleatoriedad (es mas, puede llegar a ser contraproducente) si se tiene en cuenta como se genera internamente esa lista aleatoria.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 4
Ha disminuido su posición en 18 puestos en Access (en relación al último mes)
Gráfica de Access

Actualizar grupo de registros aleatoriamente Access VBA

Publicado por scontacto (2 intervenciones) el 18/07/2018 15:13:22
Gracias anónimo por tomarte el tiempo de responder, usando tus indicaciones traté con FOR - NEXT, pero no me actualiza el numero de registros que me da la variable Aleatoria, simplemente me establece un consecutivo de a uno en uno, me podrías orientar?

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
Private Sub CmdActualizaCod_Click()
Dim DB As DAO.Database
Dim SQL As String
Dim vFacIni As Double
Dim RsLFA As DAO.Recordset
Dim LRandomNumber, i As Integer
 
SQL = "SELECT * FROM F_LFA_ABRIL WHERE FECHA BETWEEN # " & Format(Me.TxtFechaIni, "mm/dd/yyyy") & _
    "# AND #" & Format(Me.TxtFechaFin, "mm/dd/yyyy") & "#"
vFacIni = Me.TxtInicial.Value
 
Set DB = CurrentDb
Set RsLFA = DB.OpenRecordset(SQL, dbOpenDynaset)
 
 
        RsLFA.MoveFirst 'Me muevo al inicio del Recordset
            vFacIni = Me.TxtInicial ' El codigo de documento con el que debe iniciar
 
            ' Variable para determinar el numero de registros (Aleatoriamente) que debera actualizar cada vez
            ' NO esta funcionando ya que me actualiza de uno en uno, no por lotes determinados por la variable aleatoria
            '-----------------
            LRandomNumber = Int((10 - 1 + 1) * Rnd + 1) ' Numero aleatorio entre 1 y 10
 
        Do While Not RsLFA.EOF
            For i = 1 To LRandomNumber
                    With RsLFA
                        .Edit ' Detalle de facturas
                        !Cod = vFacIni 'Actualizamos con un nuevo consecutivo cada vez
                        .Update
                    ' Lanzo un Msgbox para verificar el recorrido
                    MsgBox "Art?culo : " & RsLFA!CODART & " - " & RsLFA!DESLFA & "Doc No. " & vFacIni & " Registro Aleatorios : " & LRandomNumber
                    End With
            Next i
            RsLFA.MoveNext
            vFacIni = vFacIni + 1
            LRandomNumber = Int((10 - 1 + 1) * Rnd + 1)
        Loop
 
RsLFA.Close
Set RsLFA = Nothing
Set DB = Nothing
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

Actualizar grupo de registros aleatoriamente Access VBA

Publicado por Anonimo (3397 intervenciones) el 18/07/2018 20:01:15
Normal, la pregunta es:

.- Qué se desea, modificar 'lo mismo' un numero de veces aleatorio
o …
.- Modificar (en cada paso del bucle) a un único registro (en conjunto a los que implique el aleatorio)

Todo depende de donde se ubique el 'MoveNext' (personalmente 'machacar' un numero de veces aleatorio al mismo registro creo que es una opción … un tanto 'rarita', seria como desconfiar de que la maquina funcione bien)

Access tiene una opción (a veces un tanto 'aburrida') que permite un seguimiento paso a paso del código, si se utiliza se apreciaría que es lo que funciona de forma diferente a lo esperado (bendita tecla 'F8')
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