Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

VBA - Access: Actualizar tabla mediante una consulta sobre otra tabla

Estas en el tema de VBA - Access: Actualizar tabla mediante una consulta sobre otra tabla en el foro de Bases de Datos General en Foros del Web. Hola, saludos a todos, en este mi primer mensaje. Tengo que realizar un botón en un formulario de Access que haga un select sobre una ...
  #1 (permalink)  
Antiguo 03/05/2010, 11:22
 
Fecha de Ingreso: mayo-2010
Mensajes: 5
Antigüedad: 14 años, 6 meses
Puntos: 0
Sonrisa VBA - Access: Actualizar tabla mediante una consulta sobre otra tabla

Hola, saludos a todos, en este mi primer mensaje.

Tengo que realizar un botón en un formulario de Access que haga un select sobre una tabla y segun me devuelva los resultados ir ejecutando un código de update sobre otra, ahora mismo ando un poco verde, pero si alguien me puede ayudar sobre como realizar la conexión y como manejar los resultados devueltos de la consulta se lo agradecería.

Saludos y gracias.
  #2 (permalink)  
Antiguo 04/05/2010, 00:49
Avatar de Taribo007  
Fecha de Ingreso: agosto-2007
Mensajes: 1.338
Antigüedad: 17 años, 3 meses
Puntos: 18
Respuesta: VBA - Access: Actualizar tabla mediante una consulta sobre otra tabla

Puedes usar una consulta de inserccion directa, sin necesidad de ir recorriendo e insertando registro a registro, algo asi:

INSERT INTO Tabla1 (Campo1,campo2,Campo3) SELECT Campo1,campo2,Campo3 from Tabla2

Un saludo
  #3 (permalink)  
Antiguo 04/05/2010, 03:27
 
Fecha de Ingreso: mayo-2010
Mensajes: 5
Antigüedad: 14 años, 6 meses
Puntos: 0
Respuesta: VBA - Access: Actualizar tabla mediante una consulta sobre otra tabla

Muchas gracias por responder, pero exactamente lo necesito para hacer una operación aritmética con cada uno de los registros de una columna para updatearlos a otra columna...
  #4 (permalink)  
Antiguo 04/05/2010, 03:38
Avatar de Taribo007  
Fecha de Ingreso: agosto-2007
Mensajes: 1.338
Antigüedad: 17 años, 3 meses
Puntos: 18
Respuesta: VBA - Access: Actualizar tabla mediante una consulta sobre otra tabla

Puedes realizar esa operacion aritmetica en la consulta, si tienes una funcion que lo haga puedes incluirla en la consulta origen.

No obstante, con recordset podrias hacer:

dim rstOrigen as dao.recordset
dim rstDestino as dao.recordset

Set rstOrigen=currentdb.openrecordset ("Select Campo1, campo2 from tabla1")
Set rstDestino=currentdb.openrecordset ("Select Campo1, campo2 from tabla2")

while not rstorigen.eof
rstdestino.addnew rstdestino("Campo1")=funcionQueHaceLosCalculos(rst Origen("Campo1"),rstOrigen("Campo2")
rstDestino.update
rstOrigen.movenext
wend

rstOrigen.close
rstDestino.close
set rstOrigen=nothing
set rstDestino=nothing


Algo asi, suponiendo que los calculos los haces con una funcion a la que le pasas 2 parametros, dos campos del la tabla1

Un saludo
  #5 (permalink)  
Antiguo 04/05/2010, 05:12
 
Fecha de Ingreso: mayo-2010
Mensajes: 5
Antigüedad: 14 años, 6 meses
Puntos: 0
Respuesta: VBA - Access: Actualizar tabla mediante una consulta sobre otra tabla

Mmmm vaya, basandome en el código que me expusiste antes, he realizado una prueba pero parece que no hace realmente nada... creo que algo me falla en él:

Código:
Private Sub Comando1_Click()
Dim rst1 As dao.Recordset
Dim rst2 As dao.Recordset
Dim rst3 As dao.Recordset
Dim y As Integer

Set rst1 = CurrentDb.openrecordset("select cod, valor1 from Descripcion")

While Not rst1.EOF
Set rst2 = CurrentDb.openrecordset("select sum (valor1) as suma1 FROM Descripcion Where cod = " & rst1("cod"))
Set rst3 = CurrentDb.openrecordset("select valor2 FROM Maestro where cod = " & rst1("cod"))
y = (rst3("valor2") / rst2("suma1")) * rst1("valor1")
DoCmd.RunSQL "INSERT INTO Descripcion.valor_final (" & y & ")"
rst2.Close
rst3.Close
rst1.MoveNext
Wend

rst1.Close
Set rst1 = Nothing


End Sub
P.D.: Muchas gracias por tu ayuda
  #6 (permalink)  
Antiguo 04/05/2010, 05:36
Avatar de Taribo007  
Fecha de Ingreso: agosto-2007
Mensajes: 1.338
Antigüedad: 17 años, 3 meses
Puntos: 18
Respuesta: VBA - Access: Actualizar tabla mediante una consulta sobre otra tabla

Supongo que le valor obtenido lo querras insertar en el registro cuyo Cod sea el que usas en cada iteracion del bucle para realizarlo. Si ejecutas esa consulta de inserccion asi, estas introduciendo nuevos registros con el campo valor_final relleno, y el resto vacio.

Si he entendo bien, prueba si te sirve asi:

Private Sub Comando1_Click()
Dim rst1 As dao.Recordset
Dim rst2 As dao.Recordset
Dim rst3 As dao.Recordset
Dim y As Integer

Set rst1 = CurrentDb.OpenRecordset("select cod, valor1,valor_final from Descripcion")

While Not rst1.EOF
Set rst2 = CurrentDb.OpenRecordset("select sum (valor1) as suma1 FROM Descripcion Where cod = " & rst1("cod"))
Set rst3 = CurrentDb.OpenRecordset("select valor2 FROM Maestro where cod = " & rst1("cod"))
y = (rst3("valor2") / rst2("suma1")) * rst1("valor1")

rst1.Edit
rst1("valor_final") = y
rst1.Update


rst2.Close
rst3.Close
rst1.MoveNext
Wend

rst1.Close
Set rst1 = Nothing

End Sub

No obstante, por que no funciona?? Da algun error??

Un saludo
  #7 (permalink)  
Antiguo 04/05/2010, 06:06
 
Fecha de Ingreso: mayo-2010
Mensajes: 5
Antigüedad: 14 años, 6 meses
Puntos: 0
Respuesta: VBA - Access: Actualizar tabla mediante una consulta sobre otra tabla

Vaya... he probado segun me comentas con el mismo resultado, error no me devuelve ninguno, pulso sobre el botón y no devuelve error alguno, pero tampo actualiza la tabla...
  #8 (permalink)  
Antiguo 04/05/2010, 07:25
Avatar de Taribo007  
Fecha de Ingreso: agosto-2007
Mensajes: 1.338
Antigüedad: 17 años, 3 meses
Puntos: 18
Respuesta: VBA - Access: Actualizar tabla mediante una consulta sobre otra tabla

Comprueba antes de esta sentencia:

y = (rst3("valor2") / rst2("suma1")) * rst1("valor1")

si los operadores tienen o no algun valor

Un saludo
  #9 (permalink)  
Antiguo 04/05/2010, 08:15
 
Fecha de Ingreso: mayo-2010
Mensajes: 5
Antigüedad: 14 años, 6 meses
Puntos: 0
Respuesta: VBA - Access: Actualizar tabla mediante una consulta sobre otra tabla

Jejejeje vaya fallo el mio... no estaba habilitado, al cerrarlo de forma abrupta anoche (corte de luz) y al abrirlo hoy me habia bloqueado el contenido access. lo he habilitado he ejecutado con el siguiente código:

Código:
Private Sub Comando1_Click()
Dim rst1 As Recordset
Dim rst2 As Recordset
Dim rst3 As Recordset
Dim y As Integer

Set rst1 = CurrentDb.openrecordset("select cod, valor1 from Descripcion")

While Not rst1.EOF
Set rst2 = CurrentDb.openrecordset("select sum (valor1) as suma1 FROM Descripcion Where cod = " & rst1("cod"))
Set rst3 = CurrentDb.openrecordset("select valor2 FROM Maestro where cod = " & rst1("cod"))
y = (rst3("valor2") / rst2("suma1")) * rst1("valor1")
DoCmd.RunSQL "INSERT INTO Descripcion.valor_final (" & y & ")"
rst2.Close
rst3.Close
rst1.MoveNext
Wend

rst1.Close
Set rst1 = Nothing


End Sub
como lo tenía inicialmente y ahora si que me devuelve un error 13 en tiempo de ejecución en la siguiente linea:

Set rst1 = CurrentDb.openrecordset("select cod, valor1 from Descripcion")
  #10 (permalink)  
Antiguo 04/05/2010, 08:39
Avatar de Taribo007  
Fecha de Ingreso: agosto-2007
Mensajes: 1.338
Antigüedad: 17 años, 3 meses
Puntos: 18
Respuesta: VBA - Access: Actualizar tabla mediante una consulta sobre otra tabla

Activa la refrencia Microsoft DAO x.xx object Library, si no la tienes ya activada, y si tienes activada la referencia Microsoft ActivX data object x.x library, pon la DAO por encima de esta segunda

Un saludo

Etiquetas: access, vba, tablas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:03.