ACCESS VBA: sql update dar un criterio a la tabla de destino

En el Timer de un form tengo una consulta de actualización a la que le paso por parámetros con un bucle por la parte del where para reutilizar la consulta. El timer actúa cada 10' y el proceso de ejecución es de 40 seg (es lento). Tenía pensado desarrollar mas la instrucción SQL pero mis conocimientos no son muy amplios. Podría en el update dar un criterio a la tabla de destino filtrando el valor del campo por referencia y agruparla por first valor.

1 respuesta

Respuesta
2

Juan Carlos, la verdad, prácticamente no he entendido nada. Hablas de una consulta de actualización, pero ¿no será una instrucción del tipo

Docmd.runsql"update...

Por otro lado, ¿40 sg actualizando? Una tabla. Por muchos registros que fueran me parece exagerado.

En las instrucciones puedes encadenar hasta 99 condiciones AND o OR

Por ejemplo,

Docmd.runsql"update Ventas set fechaventa=Date() where pais=""Alemania"" and ciudad=""Berlin"" and telefono=dfirst(""telefono"",""otratabla"",""director=""JUAN"""") or ...."

Por eso, si pudieras concretar algo más.

Hola Icue,

Primero agradecerte que compartas una pare de tu tiempo en ayudarme.

Seria una instrucción  Docmd.runsql"update con dos campos "Referencia" y "QTY". En la tabla de destino buscaría agrupar en  First el campo "referencia" para que agregue los valores "QTY" en el primer registro de cada referencia, si esa referencia se repite no deberá agregar ningún valor.

select First(MP.Ref) AS PrimeroDeRef, MP.Pz_Fabricadas from Modulo_Plan AS MP GROUP BY MP.Pz_Fabricadas ORDER BY First(MP.Ref) Modulo_Plan SET Pz_Fabricadas = '" & acum & "' where([Ref]='" & Ref & "');

La segunda parte de mi pregunta sería optimizar el tiempo de ejecución ya que este código va dentro del Timer del form y se repite cada 5'. En la instrucción DoCmd.RunSQL  iría la sentencia sql que os he preguntado en mi pregunta inicial que esta en el texto de arriba.

'Nos aseguramos que al abrir el form se ejecute el programa y nos actualice las pz leidas por producción

If n = 0 Then
      bfound = True
End If


If Not IsNull(fecha_Corte = DLookup("[fecha_CorteFab]", "[Box_Plan_3/3]")) Then
       fecha_Corte = DLookup("[fecha_CorteFab]", "[Box_Plan_3/3]")
End If


'*Cálculos horas minutos: hh,nn * 100 = "X" + 10000= Right("X", 4) para mas inf revisar procedimiento "Pz_Fabricadas"
q = "slelect F08ART, Sum(F08QTB) AS SumaQTY FROM BUSRCDFN_FIJ08_Historico_Reportes_planta " _
& " where (((F08DEP) = 220) And (([F08FEC] & Right((([F08HIN] * 100) + 10000), 4)) > '" & Val(fecha_Corte) & "')) GROUP BY F08ART ORDER BY F08ART;"

'creamos un contador que nos genera espacio de tiempo mas amplio que el que nos da el Timer del Form y así no colapsar el programa con la ejecución de bucles y consultas
If n > 1000 Or bfound = True Then
    rs.Open q, cnn, adOpenStatic, adLockOptimistic

    Do Until rs.EOF
        ' Declaramos variables
        Ref = rs("F08ART")
        acum = rs("SumaQTY")

        'Consulta de actualización para agregar en cada ref las pz fabrricadas
        DoCmd.RunSQL ("UPDATE Modulo_Plan SET Pz_Fabricadas = '" & acum & "' WHERE ([Ref]='"         & Ref & "');")

        rs.MoveNext
   Loop

   bfound = False
   n = 1
   rs.Close
   Set rs = Nothing
End If

Al menos que yo sepa, la instrucción Update tiene dos partes, una en la que le dices lo que vas a actualizar, y para eso se usa la palabra SET y otra a que valor vas a actualizarlo. Me explico, si tengo una tabla Copicli

De los cuales te "recorto" los de Berlín

Le voy a decir que me actualice Orden y Ciudad. Orden al valor del primero y ciudad =Cartagena, sólo en aquellos registros en que ciudad=Berlín

El código sería

Dim b As Byte
b = DFirst("orden", "copicli", "pais=""Alemania"" and ciudad=""Berlín""")
DoCmd.RunSQL "update copicli set orden= " & b & ", ciudad=""Cartagena"" where ciudad=""Berlín"""

Cuando se ejecuta

Disculpa por contestar casi un mes después pero he estado super liado con otros procedimientos que estoy realizando.

¡Muchas Gracias por tu ayuda! 

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas