Access - Salvar cambios en registro

 
Vista:

Salvar cambios en registro

Publicado por Jorge (129 intervenciones) el 14/12/2006 20:50:22
Saludos, a ver si a alguien se le ocurre que me falta.

Estoy tratando de hacer una rutina que me actualize un campo en una tabla, me hace el recorrido por la tabla sin problema, pero no guarda el valor que necesito actualizar en la tabla.

Alguien tiene una idea de que está pasando, a continuacioón el código.


Dim Rs As DAO.Recordset

Set Rs = CurrentDb.OpenRecordset("Select * From TABLA1")

Do While Not Rs.EOF

AA = Rs![VALOR_ADQUISICION]
VAL_LIBRO = AA * 1.05

rs![VALORLIBRO] = VAL_LIBRO

Rs.MoveNext
Loop

Les explico, se supone que tengo una tabla llamada TABLA1 y quiero recorrerla toda y actualizar el campo VALORLIBRO de cada registro con lo que aparece en el campo VALOR_ADQUISICION multiplicado por 1.05

Espero me puedan corregir lo que estoy haciendo mal.
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
Imágen de perfil de Pancho
Val: 467
Plata
Ha disminuido 1 puesto en Access (en relación al último mes)
Gráfica de Access

RE:Salvar cambios en registro

Publicado por Pancho (211 intervenciones) el 14/12/2006 20:59:42
Hola

Hya dos maneras de hacer lo que pides:

Te doy el consejo que es el mas rapido de los dos (via SQL)

DoCmd.SetWarning(False)

DoCmd.RunSQL "UPDATE TABLA1 SET VALORLIBRO=VALOR_ADQUISICION*1.05"

DoCmd.SetWarning(True)

Saludos
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

RE:Salvar cambios en registro

Publicado por Jorge (129 intervenciones) el 14/12/2006 21:44:46
Pancho, gracias por tu pronta respuesta,

pero lo que pasa es que yo simplifiqué el problema para que me dieran una idea, pero el campo que tengo que actualizar tengo que calcularlo durante el proceso y varía de acuerdo al contenido de otros campos, osea que no lo puedo hacer en bloque directamente como me sugieres.

ese código que me escribiste está perfecto si necesito llenar un campo de toda la tabla de un mismo valor.

¿ Cual era la otr forma que se te ocurrió, ya que me dijiste que había dos maneras de hacerlo?.

Saludos y Gracias de nuevo.
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

RE:Salvar cambios en registro

Publicado por Enrique (1299 intervenciones) el 14/12/2006 21:31:40
While recorre los registros pero tambien se necesita un buche For - Next que los vaya actualizando. Prueba así, aunque puede que falle algo porque no estoy muy seguro lo que harán los campos AA y VAL_LIBRO dentro del buche, posiblemente haya que sacarlos y ponerlos en otro lugar fuera de For Next.

Dim Rs As DAO.Recordset, K As Long
Set Rs = CurrentDb.OpenRecordset("Select * From TABLA1")
rs.MoveLast
rs.MoveFirst
While Not rs.EOF
rs.Edit
For K = 0 To rs.RecordCount - 1
AA = Rs![VALOR_ADQUISICION]
VAL_LIBRO = AA * 1.05
rs![VALORLIBRO] = VAL_LIBRO
Next K
rs.Update
rs.MoveNext
Wend

Quizás te vaya mejor la solución de Pancho.

Saludos
Enrique
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

RE:Salvar cambios en registro

Publicado por Jorge (129 intervenciones) el 14/12/2006 22:06:22
El problema que tengo es mas que nada con la línea

rs![VALORLIBRO] = VAL_LIBRO

si te fijas en micódigo yo no tenía la opción rs.Edit
y me mandaba un error, ahora la coloqué y no me manda ningún error pero igual no me guarda el campo que calculo en VALORLIBRO.

lo que pasa es que VAL_LIBRO es un campo que debo calcular el cual varía de acuerdo a los diferentes valores que tengan otros campos. y una ves que tengo VAL_LIBRO entonces lo debo guardar.

en la consulta puse que era VALOR_ADQUISICION * 1.05 simplemente para explicarlo más fácil.

pero aún no logro que actualize, los cálculos si se hacen bién porque los verifiqué corriendo el código línea por línea.

Saludos...
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
Imágen de perfil de Pancho
Val: 467
Plata
Ha disminuido 1 puesto en Access (en relación al último mes)
Gráfica de Access

RE:Salvar cambios en registro

Publicado por Pancho (211 intervenciones) el 15/12/2006 12:40:56
Hola

Pues revisando el codigo de Enrique..claro que funciona...el problema es que lo hace 2n veces por el numero total de registros que tengas en la tabla ya que el ciclo FOR..NEXT obliga a recalcular lo mismo sobre el mismo campo

Tambien es cierto loq ue afirma Enrique en cuanto al uso de Edit solo que obligatoriamente debes cerrarlo inmediatamente despues con un update

Dim Rs As Recordset
Set Rs = CurrentDb.OpenRecordset("SELECT * FROM TABLA1")
Rs.MoveLast
Rs.MoveFirst
Do While Not Rs.EOF
Rs.Edit
Rs!VALORLIBRO = Rs!VALOR_ADQUISICION * 1.05
Rs.Update
Rs.MoveNext
Loop

Saludos
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

RE:Salvar cambios en registro

Publicado por Jorge (129 intervenciones) el 15/12/2006 14:06:23
Señores

Pancho y Enrique,

Mil Gracias a los dos,

Ya funcionó, en el último código de Pancho encontré cual era mi problema, estaba declarando mal el recordset,

había escrito:
Dim Rs as DAO.Recordset

en vez de:
Dim Rs As Recordset

en fin Gracias de nuevo.
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

RE:Salvar cambios en registro

Publicado por Enrique (1299 intervenciones) el 15/12/2006 18:53:06
Hola Jorge:
Pues es muy raro esto que dices porque teniendo en cuenta que desde Access 2000 en adelante la Referencia que entra marcada por defecto es la de ADO y si quieres usar DAO (que es tu caso) debes marcarla expresamente en la Ventana "Referencias", es necesario declarar con Dim Rs As DAO.Recordset para que Access sepa cual de las dos es la que vas a usar porque si tienes marcadas las dos (que es lo normal) al no hacer referencia a DAO, es cuando se produce el error.

Estoy seguro que el error no estaba en eso, debes haber hecho algo más.

Saludos
Enrique
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
Imágen de perfil de Pancho
Val: 467
Plata
Ha disminuido 1 puesto en Access (en relación al último mes)
Gráfica de Access

RE:Salvar cambios en registro

Publicado por Pancho (211 intervenciones) el 18/12/2006 12:42:06
Hola..

Creo Enrique que el problema deriva de que tiene ADO y DAO en las referencias, y de seguro por alguna razon ADO esta primero o antes que la referencia a DAO. y tal vez le estaba tomando el recordset ADO al declararla como tal.


Saludos
Pancho
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