Como extraer datos de una tabla, procesarlos y guardarlos en otra tabla sin errores

He creado un código para calcular el retraso medio de los pedidos. Cuándo visualizo los datos en la ventana de inmediato son correctos, sin embargo, el valor que se inserta en las tablas es 0.

He utilizado códigos muy similares para otros cálculos y traspasos de información en otros módulos de la aplicación y siempre ha funcionado bien, por tanto, no entiendo porque en este módulo no funciona.

La variable “Numped” es publica, por eso no aparece declarada en este código.

El código es:

Sub retmed()
Dim inst9 As String
Dim ins9 As String
Dim instr9 As String
Dim mc9 As New Connection
Set mc9 = CurrentProject.Connection
Dim mr9 As New Recordset
Dim ret1  As Byte
Dim retmed  As Byte
inst9 = "SELECT Tabla1.num_pedido, Tabla1.Retraso, Count(Tabla1.Retraso) AS CuentaDeRetraso INTO tRet " _
    & "FROM Tabla1 GROUP BY Tabla1.num_pedido, Tabla1.Retraso HAVING Tabla1.num_pedido>0;"
CurrentDb.Execute inst9
ins9 = "SELECT tRet.Retraso, Sum(tRet.CuentaDeRetraso) AS sumret " _
    & "FROM tRet GROUP BY tRet.Retraso;"
mr9.Open ins9, mc9
instr9 = "INSERT INTO Tabla2 (num_pedido,retraso,ret_med) values (" & numped & "," & ret1 & "," & retmed & ")"
While mr9.EOF = False
    ret1 = mr9!retraso
    retmed = mr9!sumret / numped
    Debug.Print numped & " - Retraso: " & ret1 & " Suma: " & mr9!sumret & " - Media: " & retmed
    CurrentDb. Execute instr9
    mr9.MoveNext
Wend
mr9.Close
Set mr9 = Nothing
mc9.Close
Set mc9 = Nothing
CurrentDb.Execute "DROP TABLE [tret];"
End Sub

Lo dicho, con debug.print aparecen los datos correctos, pero al ejecutar la instrucción "instr9" se traspasa el valor correcto de la variable "Numped", pero el valor que se traspasa de las variables "ret1" y "retmed" es 0, cuando su valor real es otro.
¿Alguien podría orientarme porque sucede esto?
Agradeciendo de antemano cualquier ayuda que pueda recibir,
un saludo.

Respuesta
1

Tienes que poner el insert dentro del ciclo while

1 respuesta más de otro experto

Respuesta
2

Fíjate que la SQL la creas fuera del WHILE ... WEND, con unos valores para ret1 y retmed, y dentro del WHILE... WEND, antes de ejecutarla le asignas a esas variables otros valores.

Conclusión, mete la línea que crea la SQL (instr9="INSERT ...") justo antes del CurrentDb. Execute instr9.

Un saludo.


Añade tu respuesta

Haz clic para o

Más respuestas relacionadas