Access - añadir registro de un recordset a otro

 
Vista:

añadir registro de un recordset a otro

Publicado por MAR LOPEZ (41 intervenciones) el 23/02/2007 12:43:20
Seguro que es una tontería, pero me he atascado. Tengo un recordset OrigenInforme. Tengo que añadir tantos registro como indique en el campo Cantidad de ese recordset, a otro que se llama DestinoInforme. Los campos son identicos en ambas.

Do While Not OrigenInforme.EOF 'recorremos todos los registros del recordset
variable1 = OrigenInforme!Cantidad

For variable = 1 To variable1
DestinoInforme.AddNew
DestinoInforme.Edit
DestinoInforme = OrigenInforme <---Esto es lo que no se hacer
DestinoInforme.Update
Next variable
OrigenInforme.MoveNext
Loop

¿Cual es la sentencia para que asigne el valor de un registro a otro? ¿Hay que hacerlo campo por campo? ¿como?

SOCORRO00000000000
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

RE:añadir registro de un recordset a otro

Publicado por Enrique (1299 intervenciones) el 23/02/2007 15:33:22
Lo primero de todo es definir la variable para el For Next (As Integer o As Long) y los Recorset de ambas tablas y abrirlos (supongo que esto ya lo haces)

OrigenInforme.MoveLast
OrigenInforme.MoveFirst
While Not OrigenInforme.EOF
DestinoInforme.AddNew
For variable = 1 To Variable1
DestinoInforme.Fields(variable) = OrigenInforme.Fields(variable)
Next variable
DestinoInforme.Update
OrigenInforme.MoveNext
Wend

Ojo, las dos tablas deberán ser iguales y tener los campos en el mismo órden, ya que como verás utilizamos la posicion de los campos(Fields) para el traspaso.

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:añadir registro de un recordset a otro

Publicado por Enrique (1299 intervenciones) el 23/02/2007 16:11:22
Cambia:
For variable = 1 To Variable1
por:
For variable = 0 To Variable1 - 1

Ya que el primer campo por la izquierda en una Tabla (Field) es 0 y no 1. Como estaba antes no te traspasaría el primer campo de cada registro.

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:añadir registro de un recordset a otro

Publicado por mar lopez (41 intervenciones) el 23/02/2007 16:18:41
Sigo teniendo una duda

Do While Not OrigenInforme.EOF 'recorremos todos los registros del recordset
variable1 = OrigenInforme!Cantidad 'registros que tengo que añadir
For variable = 1 To variable1
DestinoInforme.AddNew 'añado 1 registor
For var =1 to varnumerocampos-1
DestinoInforme.Fields(variable) = OrigenInforme.Fields(variable)
Next var
DestinoInforme.Update
Next variable
OrigenInforme.MoveNext
Loop
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:añadir registro de un recordset a otro

Publicado por mar lopez (41 intervenciones) el 23/02/2007 16:18:42
Sigo teniendo una duda

Do While Not OrigenInforme.EOF 'recorremos todos los registros del recordset
variable1 = OrigenInforme!Cantidad 'registros que tengo que añadir
For variable = 1 To variable1
DestinoInforme.AddNew 'añado 1 registor
For var =1 to varnumerocampos-1
DestinoInforme.Fields(variable) = OrigenInforme.Fields(variable)
Next var
DestinoInforme.Update
Next variable
OrigenInforme.MoveNext
Loop
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:añadir registro de un recordset a otro

Publicado por mar lopez (2 intervenciones) el 23/02/2007 16:23:18
Las dos notas anteriores se han añadido por error.

Sigo teniendo una duda

Do While Not OrigenInforme.EOF 'recorremos todos los registros del recordset
variable1 = OrigenInforme!Cantidad 'registros que tengo que añadir
For variable = 1 To variable1
DestinoInforme.AddNew 'añado 1 registo
For var =1 to varnumerocampos-1 'para cada campo
DestinoInforme.Fields(var) = OrigenInforme.Fields(vari)
Next var 'paso al siguente campo
DestinoInforme.Update 'actualizo el registro
Next variable 'paso a añadir el siguiente registro
OrigenInforme.MoveNext 'paso al siguiente registro
Loop

¿de donde saco el valor "varnumerocampos"?
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:añadir registro de un recordset a otro

Publicado por Enrique (1299 intervenciones) el 23/02/2007 18:07:30
Pues en tu mensaje inicial lo sacabas de la Tabla o Consulta "OrigenInforme", una vez abierto su Recordset y justo antes de iniciar el ciclo For Next, de esta forma:
variable1 = OrigenInforme!Cantidad, aunque yo no he incluido esta línea en mi ejemplo porque daba por hecho que tu lo tendrías en cuenta, pero entonces ese número tiene que estar grabado previamente en el Campo "Cantidad" de la Tabla Origen, cosa que a mi entender no es habitual.

Otra forma sería tener un Campo "Independiente" en el Formulario de nombre "varnumerocampos" y ahí poner el número antes de iniciar el Evento, quedando así:
variable1 = Me.varnumerocampos

Prueba a ver si de esta forma te sirve.
Un saludo
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:añadir registro de un recordset a otro

Publicado por Enrique (1299 intervenciones) el 23/02/2007 18:30:31
Hola de nuevo Mar:
Acabo de darme cuenta que "Variable1" lo usas para determinar el número de registros, no de campos, en ese caso sería así:

For var = 0 To OrigenInforme.Fields.Count - 1
DestinoInforme.Fields(var) = OrigenInforme.Fields(var)

Y ya no necesitas la variable "varnumerocampos", claro que esto te traspasará todos los campos de Origen a Destino. Si necesitas que pase solo los campos que tu quieras, tendrás que usar la segunda opción que te dije antes del campo Independiente.

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:añadir registro de un recordset a otro

Publicado por mar lopez (41 intervenciones) el 23/02/2007 20:20:39
Eso es exactamente lo que queria. Hemos tardado un poco en entenderlos. Muchas gracias, creo que me has quitado un gran quebradero de cabeza. El lunes lo probaré en la ofi y te diré si funciona, que yo creo que irá como el rayo. Muchas gracias por tu inestimable ayuda.
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:añadir registro de un recordset a otro

Publicado por Enrique (1299 intervenciones) el 23/02/2007 21:47:13
No se merecen las gracias, para eso estamos. De todas formas si vieras que luego te da algún problema, cambia esta línea:
For var = 0 To OrigenInforme.Fields.Count - 1
por esta otra:
For var = 0 To DestinoInforme.Fields.Count - 1

Visto ahora más friamente, creo que es más razonable tomar DestinoInforme para contar los campos, en vez de OrigenInforme por si la tabla Destino tuviera menos campos que Origen y además así es como yo lo tengo en mis programas funcionando sin problemas desde hace años.

Saludos de nuevo
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:añadir registro de un recordset a otro

Publicado por MAR LOPEZ (41 intervenciones) el 26/02/2007 09:09:36
Private Sub CrearTablaInforme()
Dim dbOrigen As Database
Dim OrigenInforme As Recordset
Dim DestinoInforme As Recordset
Dim fldOrigen As Field
Dim variable, variable1, var As Integer

DoCmd.SetWarnings False
DoCmd.OpenQuery "InformeMovimiento" 'Creo la tabla informe con los registros sin activo
Set dbOrigen = CurrentDb 'seleccionamos base datos
Set OrigenInforme = dbOrigen.OpenRecordset("InformeMovimientoVerdadero")
Set DestinoInforme = dbOrigen.OpenRecordset("Informe")
'Recorremos todo el recordset para conocer el nº de registros
OrigenInforme.MoveLast 'vamos al último
OrigenInforme.MoveFirst 'volvemos al primero

Do While Not OrigenInforme.EOF 'recorremos todos los registros del recordset
variable1 = OrigenInforme!Cantidad
For variable = 1 To variable1
DestinoInforme.AddNew
For var = 0 To DestinoInforme.Fields.Count - 1
DestinoInforme.Fields(var) = OrigenInforme.Fields(var)
Next var
DestinoInforme.Update
Next variable
OrigenInforme.MoveNext 'Avanzamos al siguiente registro
Loop 'saltamos al siguiente registro
OrigenInforme.Close
dbOrigen.Close ' cerramos la BD
Close 'cerramos los archivos
Exit Sub
DoCmd.SetWarnings True
End Sub
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:añadir registro de un recordset a otro

Publicado por mar lopez (41 intervenciones) el 26/02/2007 09:11:15
He anexado el código completo, que funciona perfectamente, para quien lo pueda necesitar. Muchas gracias por todo.
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:añadir registro de un recordset a otro

Publicado por mar lopez (41 intervenciones) el 26/02/2007 09:11:18
He anexado el código completo, que funciona perfectamente, para quien lo pueda necesitar. Muchas gracias por todo.
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