Visual Basic - Actualizar todos los registros de una tabla con Recordset

Life is soft - evento anual de software empresarial
   
Vista:

Actualizar todos los registros de una tabla con Recordset

Publicado por Toni (6 intervenciones) el 19/11/2012 15:49:10
Buenas,

Estoy intentado actualizar un campo de porcentaje con un Recordset, pero no lo consigo. La idea es que el campo 'Total' sea la división del campo 'Valor' respecto la variable 'TotalValor'.

(Acces 2007, VB 6.3)

' Calculo la suma de todos los campos Valor i la guardo en TotalValor
Dim TotalValor As Double
Dim dba, rsa As Recordset

Set dba = CurrentDb
Set rsa = dba.OpenRecordset("Select SUM(Valor) AS TotalValor FROM Tabla1")
TotalValor = rsa!TotalValor

rsa.Close
dba.Close

'Paso un recordset para actualizar el campo Total
Dim db As Database
Dim rst As Recordset

Set db = CurrentDb
Set rst = db.OpenRecordset("tabla1")

Do While Not rst.EOF
rst.Edit
rst(Total) = Valor / TotalValor
rst.Update
rst.MoveNext
Loop

rst.Close
db.Close

Me.Recalc

Gracias
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 todos los registros de una tabla con Recordset

Publicado por cmgcharli (128 intervenciones) el 20/11/2012 08:04:32
Lo que pretendes hacer creo que la mejor manera es meidante una consulta de actualización

Dim TotalMiValor As Double
Dim dba as Database
Dim rsa as Recorset

Set dba=currentDb
Set rsa = dba.OpenRecordset("Select SUM(Valor) AS TotalValor FROM Tabla1")

TotalMiValor = rsa!TotalValor

rsa.Close

dba.Execute "UPDATE TABLA1 SET TOTAL=VALOR/" & TotalMiValor

dba.close
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 todos los registros de una tabla con Recordset

Publicado por Toni (6 intervenciones) el 20/11/2012 09:36:54
Gracias, cmgcharli.

La línea que me propones funciona bien cuando el UPDATE se hace con cualquier constante:

dba.Execute "UPDATE TABLA1 SET TOTAL = VALOR / 2"

En este caso los registros quedan cambiados, pero cuando cambio la constante por TotalMiValor, el valor de todos los campos Total se actualiza a 0.
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 todos los registros de una tabla con Recordset

Publicado por cmgcharli (128 intervenciones) el 21/11/2012 08:44:00
Comprueba que valor tine TotalMiValor lo mismo contiene un valor inadecuado o incluso 0,00, segundo si los numeros son con decimales define TotalMiValor como Currency
O si son enteros como Long
Por ultimo y segun el caso en la linea

TotalMiValor = rsa!TotalValor

pon

TotalMiValor=CCur(rsa!TotalValor)

o

TotalMiValor=Clng(rsa!TotalValor)

Sin ver el contenido de las tablas y la vista de lo que me indicas es lo primero que se me ocurre que pueda originar esta paradoja
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 todos los registros de una tabla con Recordset

Publicado por Toni (6 intervenciones) el 21/11/2012 09:59:18
El valor de TotalMiValor es correcto, durante la ejecución del código la inspección devuelve para este valor la suma de los valores de Valor.

Estoy perdido, no se que puede ocurrir. Puedo enviarte la tabla y el código, a ver si descubres que puede estar pasando?
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 todos los registros de una tabla con Recordset

Publicado por cmgcharli (128 intervenciones) el 22/11/2012 08:05:01
cmgcharli@terra.es
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 todos los registros de una tabla con Recordset

Publicado por Toni (6 intervenciones) el 22/11/2012 13:15:19
Gracias, cmgcharli, pongo en còpia tu respuesta, para utilidad de todos.
Toni

---------------------
El campo Total de la Tabla1 esta definido como Entero Largo y logicamente cuando divimos un numero del campo valor por la suma de todos los registro del campo valor lo mas probable es que en un 99,99% nos salga un numero con decimales y no entero, por otro lado como siempre la suma sera bastante mayor que el contenido del campo Valor de cada registro y portanto todas las divisiones sera 0,...... .
Si pruebas a poner como constante el contenido de TotalMiValor veras que no se modifica tampoco , si lo haces con una constante como el 2 te funcionara porque siempre dara un numero entero dado que los valores de todos los registros del campo valor son numeros pares

Debes de cambiar en vista diseño de la tabla el tipo de dato del campo Total, recomiento en principio que el campo Total los definas como numero -simple o numero -doble, todo dependera del numero de decimales que deseas obtener

Un Saludo
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