es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Bucle anidado para actualizar conjunto de registros no funciona en Access.

Estoy planificando buscar y actualizar registros que coincidan con mis criterios en mi tabla a través de un formulario. Quiero que mi código busque el número de orden (OrderNo) y el elemento del número de orden (OrderNoItem) (para cada número de orden tengo múltiples elementos de número de orden como 10, 20, 30… en mi tabla). Cuando haya una coincidencia, quiero actualizar el nombre del cliente (Text18.Value) desde mi formulario.

Tengo el siguiente código. Por alguna razón, solo está actualizando el primer registro. Por ejemplo, cuando ingreso Text25.Value = 12345, Text27.Value = 20 y Text49.Value = 40, solo actualiza el nombre del cliente para las filas con 12345 y 20. ¿Alguien puede ayudar?

Set logDB1 = CurrentDb()
Set logRS1 = logDB1.OpenRecordset("Log")

For i = Text27.Value To Text49.Value Step 10
    Do Until logRS1.EOF
         If (logRS1![OrderNo] = Text25.Value And logRS1![OrderNoItem] = Text27.Value) Then

            logRS1.Edit
            logRS1![DTN-#] = Text18.Value
            logRS1.Update

         End If
    logRS1.MoveNext
    Loop

    Next

Espero que esta información sea útil.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para actualizar todos los registros que coincidan con los criterios, debes mover la posición de la instrucción logRS1.MoveFirst justo antes del bucle For. Esto garantizará que el conjunto de registros se reinicie al primer registro antes de cada iteración del bucle.

    Aquí tienes el código actualizado:

    Set logDB1 = CurrentDb()
    Set logRS1 = logDB1.OpenRecordset("Log")   
    
    logRS1.MoveFirst ' Mover al primer registro
    
    For i = Text27.Value To Text49.Value Step 10
        Do Until logRS1.EOF
             If (logRS1![OrderNo] = Text25.Value And logRS1![OrderNoItem] = i) Then
    
                logRS1.Edit
                logRS1![DTN-#] = Text18.Value
                logRS1.Update
    
             End If
        logRS1.MoveNext
        Loop        
    Next
    

    En este código actualizado, también estamos utilizando la variable i como el valor de OrderNoItem, en lugar de siempre usar Text27.Value. Esto asegura que estamos iterando a través de todos los valores entre Text27.Value y Text49.Value, en lugar de solo el primer valor.

    También debes notar que hemos reemplazado Text27.Value con i dentro del bucle, ya que ahora estamos usando i como el valor de OrderNoItem.

Comments are closed.