Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Copiar campos de una tabla a otra

1,400 views
Skip to first unread message

tron

unread,
Jun 23, 2009, 12:59:29 PM6/23/09
to

Hola a todos, mi pregunta es, como puedo copiar (no mover)todos los campos
de una tabla a otra a traves de un formulario?
tengo Access 2007 y tengo un formulario con cargas disponibles que un humano
va rellenando, en ese formulario hay una casilla de verificacion que al
hacer click deberia eliminar todos los datos de ese formulario para pasarlos
a otro formulario llamado cargas efectuadas con los mismos campos. No se
creo que pido algo imposible, ya que me he estado rompiendo los cuernos a
base de consultas.

Gracias de antemano

jmmiralles

unread,
Jun 23, 2009, 2:32:01 PM6/23/09
to

Hola tron

Con una pequeña instrucción SQL puedes hacerlo,

1º Antes de ejecutar la consulta deberías introducir todos los condicionales
para que se pueda copiar, eso te lo dejo a tí.

2º Declaramos una variable de tipo cadena.
3º A la variable le asignamos la instrucción SQL
4º Mediante el objeto DoCmd ejecutamos la instrucción.

El código sería algo así:

'==========================================
Dim strSQL As String

strSQL = "INSERT INTO tabla2 ( IdAsiento,IdFactura)" _
& "SELECT tabla1.IdAsiento,tabla1.Idfactura FROM tabla1 WHERE ......."

DoCmd.RunSQL strSQL

'===========================================


En la instrucción SQL si te fijas no he puesto ninguna condición, eso te lo
dejo a tí también.
Otra cosa mariposa, si deseas borrar la línea de la primera tabla, puesto
que la has copiado en la segunda tabla, con otra instrucción SQL pero usando
DELETE (busca en la ayuda) podrás hacerlo o como estás usando un formulario
con el código que te genera un botón comando de borrar lo introduces
inmediatamente después del código DoCmd.RunSQL strSQL.

Espero que te sirva.

Saludos desde un lugar de la Mancha.

"tron" escribió:

tron

unread,
Jun 24, 2009, 1:05:50 PM6/24/09
to

Buufff, jmmiralles, me has dejado ko, soy un poco pez en tema de access y el
problema de lo que me comentases que el segundo formulario(tabla2) saca todo
el resultado automatico de una consulta que viene todos los resultados del
formulario1(tabla1) que quiero decir con esto, que si elimino el registro
cuando pican en la casilla de verificacion se me borrara toda la informacion
de la consulta.
No se si hacer que la info la coja directamente la tabla2 de la tabla1 sin
consulta y cuando el humano pique en la casilla se elimine el registro....
Buff que follon.

Gracias de antemano

Un saludo desde otro lugar de la mancha
"jmmiralles" <jmmir...@discussions.microsoft.com> escribió en el mensaje
de noticias news:ED5BBBC3-8DDE-49D5...@microsoft.com...

tron

unread,
Jun 24, 2009, 1:07:02 PM6/24/09
to

Buufff, jmmiralles, me has dejado ko, soy un poco pez en tema de access y el
> problema de lo que me comentases que el segundo formulario(tabla2) saca
> todo
> el resultado automatico de una consulta que viene todos los resultados del
> formulario1(tabla1) que quiero decir con esto, que si elimino el registro
> cuando pican en la casilla de verificacion se me borrara toda la
> informacion
> de la consulta.
> No se si hacer que la info la coja directamente la tabla2 de la tabla1 sin
> consulta y cuando el humano pique en la casilla se elimine el registro....
> Buff que follon.
>
> Gracias de antemano
>
> Un saludo desde otro lugar de la mancha

"jmmiralles" <jmmir...@discussions.microsoft.com> escribió en el mensaje
de noticias news:ED5BBBC3-8DDE-49D5...@microsoft.com...

jmmiralles

unread,
Jun 25, 2009, 6:00:02 AM6/25/09
to

Hola tron

En este link te dejo un pequeño ejemplo de como se puede hacer.

http://cid-cb16876469337616.skydrive.live.com/self.aspx/P%c3%bablico/CopiaTabla2-Tabla3.mdb


Para copiar de una tabla a otra puedes hacer una consulta de Datos Anexados
y para borrar el registro puedes hacer una consulta de eliminación o en el
formulario pones el botón de eliminar.


Otra opción es:
1º Creas un consulta de Datos Anexado y otra de eliminación con las
condiciones que se tienen que dar para que se realice la consulta.

2º Copias el código SQL que te crea la consulta y la pegas en la
instrucción que yo te pongo.

Ya cuentas cómo te ha ido,

tron

unread,
Jun 26, 2009, 7:21:13 PM6/26/09
to

HOLA JMMIRALLES,

Gracias por tu respuesta que me ha servido de mucho pero de mucho.
No lo sabes bien , eres un fiera te lo agradezco un monton , ojala hubiera
mas gente como tu.

un saludo muy fuerte y te debo una cerveza minimo.


"jmmiralles" <jmmir...@discussions.microsoft.com> escribió en el mensaje

de noticias news:CD8098EF-2DB9-43D8...@microsoft.com...

jmmiralles

unread,
Jun 27, 2009, 6:51:01 AM6/27/09
to

Hola tron

Hay dos cosas que me tomo muy en serio, un café y una buena cerveza, con lo
cual cuidado que algún día te puedo reclamar esa cerveza, je, je

Cuando tengas dudas pues ya sabes, en este foro cualquiera te ayudará de
forma desinteresada, que eso es lo bonito.

Saludos desde un lugar de la Mancha

"tron" escribió:

tron

unread,
Jun 28, 2009, 5:46:32 PM6/28/09
to

Jejeje, de verdad muchas gracias.

PD: Dime que bar y te la dejo pagada por paypal ;-)


"jmmiralles" <jmmir...@discussions.microsoft.com> escribió en el mensaje

de noticias news:FE963F84-DEA1-4A22...@microsoft.com...

tron

unread,
Jul 2, 2009, 3:39:06 PM7/2/09
to

bueno parecia resuelto pero ahora viene otra dificultad, el codigo es este
....
Dim strSQL As String 'le asignaremos la instrucci�n SQL para Insertar o
Copiar
Dim strSQL2 As String 'Le asignaremos la instrucci�n SQL para Borrar
Dim respuesta As String 'Recogera la respuesta del usuario de Copiar
SI/NO
Dim respuesta2 As String 'Recogera la respuesta del usuario de
Borrar SI/NO

''Si la casilla de verificaci�n chBaja est� activada entonces
If Me.Verificaci�n109.Value = -1 Then
''Desactivamos las advertencias de access
DoCmd.SetWarnings False
Me.Requery
''lanzamos un mensaje para indicar si queremos copiar el
registro
respuesta = MsgBox("�Quieres introducir la carga a
efectuada?", vbInformation + vbYesNo, "Introducir")
''si la respuesta del usuario es SI entonces
If respuesta = vbYes Then
''ejecutamos la instrucci�n SQL de copiar registros
strSQL = "INSERT INTO incidencias
(idCARGADO,CLIENTE,FECHAsalida,FECHAllegada,REMITENTE,DESTINATARIO,CODIGOINTERNO,EXPORT,IMPORT,NACIONAL,CARGACOMPLETA,NBULTOS,VOLUMEN,ML,MERCANCIA,COBRAMOS,TRANSPORTISTA,MATRICULA,PAGAMOS,PESO)
SELECT
cargasefectuadas.idcargado,cargasefectuadas.CLIENTE,cargasefectuadas.FECHACARGA,cargasefectuadas.FECHADESCARGA,cargasefectuadas.REMITENTE,cargasefectuadas.DESTINATARIO,cargasefectuadas.CODIGOINTERNO,cargasefectuadas.export,cargasefectuadas.import,cargasefectuadas.nacional,cargasefectuadas.cargacompleta,cargasefectuadas.nbultos,cargasefectuadas.volumen,cargasefectuadas.ml,cargasefectuadas.MERCANCIA,cargasefectuadas.COBRAMOS,cargasefectuadas.TRANSPORTISTA,cargasefectuadas.MATRICULA,cargasefectuadas.PAGAMOS,cargasefectuadas.PESO
FROM cargasefectuadas WHERE cargasefectuadas.idcargado=idcargado.Value"
DoCmd.RunSQL strSQL

Else
''en caso contrario, es decir, pulsa NO
''a la casilla de verificaci�n la desactivamos y salimos
de la sub
Me.Verificaci�n109.Value = 0

Exit Sub
End If
''Si llegamos a este punto es porque hemos copiado el registro
anteriormente
''Preguntamos si queremos borrar el registro
respuesta2 = MsgBox("�Deseas borrar el contenido de las cargas
disponibles?", vbInformation + vbYesNo, "Eliminar")
''Si la respuesta es SI

If respuesta2 = vbYes Then
''ejecutamos la instrucci�n para borrar el registro
''actualizamos el formulario
''la casilla de verificaci�n la desactivamos
strSQL2 = "DELETE
idCARGADO,CLIENTE,FECHACARGA,FECHADESCARGA,REMITENTE,DESTINATARIO,CODIGOINTERNO,MERCANCIA,COBRAMOS,TRANSPORTISTA,MATRICULA,PAGAMOS,PESO,OBSERVACIONES
FROM cargasefectuadas WHERE IdCARGADO=IdCARGADO.Value"
DoCmd.RunSQL strSQL2
'DoCmd.RunCommand acCmdSelectRecord
'DoCmd.RunCommand acCmdDeleteRecord
Me.Requery
Me.Verificaci�n109.Value = 0
Else
''si pulsa NO solamente salimos de la Sub.
Exit Sub
End If
Else
''Si la casilla de verificaci�n chBaja est� desactivada
''No hacemos nada
End If
''Activamos las advertencias de Access
DoCmd.SetWarnings True

Vale todo me sale correcto pero.... que pasa si le pincho que no quiero
borrar el registro, pues se me queda todo igual menos la casilla que la
quiero activada no desactivada. Quiero decir que en cada registro no borrado
se quede la casilla en la opcion marcada.

Gracias anticipadamente

"tron" <webm...@klanesp.com> escribi� en el mensaje de noticias
news:051CD90B-A227-4BB0...@microsoft.com...

jmmiralles

unread,
Jul 3, 2009, 5:14:01 AM7/3/09
to

Hola tron

En la sección del código donde se borran los registros tienes el siguiente
comentario:

''si pulsa NO solamente salimos de la Sub.

Después de ese comentario escribe el siguente código:


Me.Verificacin109.Value = 0


Lo demás lo dejas tal cual, el código se quedaría algo asi:


Else
''si pulsa NO solamente salimos de la Sub.

Me.Verificacin109.Value = 0
Exit Sub
End If

======================================


En las casillas de verificación el valor activado es -1 y desactivado es 0.

Con esto creo que me he ganado la cerveza del viernes.

Espero te sirva.


Saludos desde un lugar de la Mancha.

"tron" escribió:

> bueno parecia resuelto pero ahora viene otra dificultad, el codigo es este
> ....
> Dim strSQL As String 'le asignaremos la instruccin SQL para Insertar o
> Copiar
> Dim strSQL2 As String 'Le asignaremos la instruccin SQL para Borrar


> Dim respuesta As String 'Recogera la respuesta del usuario de Copiar
> SI/NO
> Dim respuesta2 As String 'Recogera la respuesta del usuario de
> Borrar SI/NO
>

> ''Si la casilla de verificacin chBaja est activada entonces
> If Me.Verificacin109.Value = -1 Then


> ''Desactivamos las advertencias de access
> DoCmd.SetWarnings False
> Me.Requery
> ''lanzamos un mensaje para indicar si queremos copiar el
> registro
> respuesta = MsgBox("Quieres introducir la carga a
> efectuada?", vbInformation + vbYesNo, "Introducir")
> ''si la respuesta del usuario es SI entonces
> If respuesta = vbYes Then

> ''ejecutamos la instruccin SQL de copiar registros


> strSQL = "INSERT INTO incidencias
> (idCARGADO,CLIENTE,FECHAsalida,FECHAllegada,REMITENTE,DESTINATARIO,CODIGOINTERNO,EXPORT,IMPORT,NACIONAL,CARGACOMPLETA,NBULTOS,VOLUMEN,ML,MERCANCIA,COBRAMOS,TRANSPORTISTA,MATRICULA,PAGAMOS,PESO)
> SELECT
> cargasefectuadas.idcargado,cargasefectuadas.CLIENTE,cargasefectuadas.FECHACARGA,cargasefectuadas.FECHADESCARGA,cargasefectuadas.REMITENTE,cargasefectuadas.DESTINATARIO,cargasefectuadas.CODIGOINTERNO,cargasefectuadas.export,cargasefectuadas.import,cargasefectuadas.nacional,cargasefectuadas.cargacompleta,cargasefectuadas.nbultos,cargasefectuadas.volumen,cargasefectuadas.ml,cargasefectuadas.MERCANCIA,cargasefectuadas.COBRAMOS,cargasefectuadas.TRANSPORTISTA,cargasefectuadas.MATRICULA,cargasefectuadas.PAGAMOS,cargasefectuadas.PESO
> FROM cargasefectuadas WHERE cargasefectuadas.idcargado=idcargado.Value"
> DoCmd.RunSQL strSQL
>
> Else
> ''en caso contrario, es decir, pulsa NO

> ''a la casilla de verificacin la desactivamos y salimos
> de la sub
> Me.Verificacin109.Value = 0


>
> Exit Sub
> End If
> ''Si llegamos a este punto es porque hemos copiado el registro
> anteriormente
> ''Preguntamos si queremos borrar el registro
> respuesta2 = MsgBox("Deseas borrar el contenido de las cargas
> disponibles?", vbInformation + vbYesNo, "Eliminar")
> ''Si la respuesta es SI
>
> If respuesta2 = vbYes Then

> ''ejecutamos la instruccin para borrar el registro
> ''actualizamos el formulario
> ''la casilla de verificacin la desactivamos


> strSQL2 = "DELETE
> idCARGADO,CLIENTE,FECHACARGA,FECHADESCARGA,REMITENTE,DESTINATARIO,CODIGOINTERNO,MERCANCIA,COBRAMOS,TRANSPORTISTA,MATRICULA,PAGAMOS,PESO,OBSERVACIONES
> FROM cargasefectuadas WHERE IdCARGADO=IdCARGADO.Value"
> DoCmd.RunSQL strSQL2
> 'DoCmd.RunCommand acCmdSelectRecord
> 'DoCmd.RunCommand acCmdDeleteRecord
> Me.Requery

> Me.Verificacin109.Value = 0


> Else
> ''si pulsa NO solamente salimos de la Sub.
> Exit Sub
> End If
> Else

> ''Si la casilla de verificacin chBaja est desactivada

jmmiralles

unread,
Jul 3, 2009, 7:36:01 AM7/3/09
to

Hola tron
Antes te he contestado pero creo que no te he entendido, ¿Qué deseas hacer y
para qué?

Por ejemplo, quieres copiar de una tabla a otra, pero cuando pulsas la
opción no borrar ¿qué es lo que necesitas que te haga el código?

porque tienes varias opciones:

1ª lo dejas tal cual está.
2ª que te diga que el registro esta copiado en otra tabla y aquí tienes
varias opciones:
a) bloquear el registro para no poder copiar y que no se produzcan
duplicados.
b) dejar que se pueda copiar el registro en la otra tabla.
c) etc, etc

Ten presente, que si copias de una tabla a otra y no borras en la primera
tabla, siempre podrás volvar a copiar el mismo registro, llegando incluso a
tener las 2 Gigas de memoria en una tabla con el mismo registro, eso sería
muchas copias.

Es importante saber qué necesitas y para qué, porque se podría hacer un
código en función a tus necesidades,
desde buscar en la segunda tabla si exite el registro, es decir, si se ha
copiado con anterioridad, y si se ha copiado
entonces, permitir borrarlo de la primera tabla o dejarlo bloqueado etc.

Espero noticias.

Saludos desde un lugar de la Mancha.

"tron" escribió:

> bueno parecia resuelto pero ahora viene otra dificultad, el codigo es este
> ....
> Dim strSQL As String 'le asignaremos la instruccin SQL para Insertar o
> Copiar
> Dim strSQL2 As String 'Le asignaremos la instruccin SQL para Borrar


> Dim respuesta As String 'Recogera la respuesta del usuario de Copiar
> SI/NO
> Dim respuesta2 As String 'Recogera la respuesta del usuario de
> Borrar SI/NO
>

> ''Si la casilla de verificacin chBaja est activada entonces
> If Me.Verificacin109.Value = -1 Then


> ''Desactivamos las advertencias de access
> DoCmd.SetWarnings False
> Me.Requery
> ''lanzamos un mensaje para indicar si queremos copiar el
> registro
> respuesta = MsgBox("Quieres introducir la carga a
> efectuada?", vbInformation + vbYesNo, "Introducir")
> ''si la respuesta del usuario es SI entonces
> If respuesta = vbYes Then

> ''ejecutamos la instruccin SQL de copiar registros


> strSQL = "INSERT INTO incidencias
> (idCARGADO,CLIENTE,FECHAsalida,FECHAllegada,REMITENTE,DESTINATARIO,CODIGOINTERNO,EXPORT,IMPORT,NACIONAL,CARGACOMPLETA,NBULTOS,VOLUMEN,ML,MERCANCIA,COBRAMOS,TRANSPORTISTA,MATRICULA,PAGAMOS,PESO)
> SELECT
> cargasefectuadas.idcargado,cargasefectuadas.CLIENTE,cargasefectuadas.FECHACARGA,cargasefectuadas.FECHADESCARGA,cargasefectuadas.REMITENTE,cargasefectuadas.DESTINATARIO,cargasefectuadas.CODIGOINTERNO,cargasefectuadas.export,cargasefectuadas.import,cargasefectuadas.nacional,cargasefectuadas.cargacompleta,cargasefectuadas.nbultos,cargasefectuadas.volumen,cargasefectuadas.ml,cargasefectuadas.MERCANCIA,cargasefectuadas.COBRAMOS,cargasefectuadas.TRANSPORTISTA,cargasefectuadas.MATRICULA,cargasefectuadas.PAGAMOS,cargasefectuadas.PESO
> FROM cargasefectuadas WHERE cargasefectuadas.idcargado=idcargado.Value"
> DoCmd.RunSQL strSQL
>
> Else
> ''en caso contrario, es decir, pulsa NO

> ''a la casilla de verificacin la desactivamos y salimos
> de la sub
> Me.Verificacin109.Value = 0


>
> Exit Sub
> End If
> ''Si llegamos a este punto es porque hemos copiado el registro
> anteriormente
> ''Preguntamos si queremos borrar el registro
> respuesta2 = MsgBox("Deseas borrar el contenido de las cargas
> disponibles?", vbInformation + vbYesNo, "Eliminar")
> ''Si la respuesta es SI
>
> If respuesta2 = vbYes Then

> ''ejecutamos la instruccin para borrar el registro
> ''actualizamos el formulario
> ''la casilla de verificacin la desactivamos


> strSQL2 = "DELETE
> idCARGADO,CLIENTE,FECHACARGA,FECHADESCARGA,REMITENTE,DESTINATARIO,CODIGOINTERNO,MERCANCIA,COBRAMOS,TRANSPORTISTA,MATRICULA,PAGAMOS,PESO,OBSERVACIONES
> FROM cargasefectuadas WHERE IdCARGADO=IdCARGADO.Value"
> DoCmd.RunSQL strSQL2
> 'DoCmd.RunCommand acCmdSelectRecord
> 'DoCmd.RunCommand acCmdDeleteRecord
> Me.Requery

> Me.Verificacin109.Value = 0


> Else
> ''si pulsa NO solamente salimos de la Sub.
> Exit Sub
> End If
> Else

> ''Si la casilla de verificacin chBaja est desactivada

tron

unread,
Jul 3, 2009, 3:49:42 PM7/3/09
to

Hola JMMiralles, gracias otra vez por tu supercontestación, bueno haber lo
que quiero es que al apretar la casilla se copie la información hasta aqui
todo correcto, el caso es que si el personaje le da por no borrar el
registro en la segunda pregunta la casilla me sale como desactivada cuando
deberia dejarla activada y lo segundo es .. si deja el registro como tu
dices que no (sin activar)y un dia le de por equivocación volver a pinchar
que no se copie si esta ya introducida en la segunda tabla.

Buff se me complica las cosas cada dia maaaasss.
Gracias por tu tiempo y ya te digo que la cerveza cuando tu digas :-)

"jmmiralles" <jmmir...@discussions.microsoft.com> escribió en el mensaje
de noticias news:2FEEC768-11F1-4264...@microsoft.com...

jmmiralles

unread,
Jul 6, 2009, 6:55:01 AM7/6/09
to
Hola tron
en el link tienes una posible solución a tu problema y es la siguiente:
En el formulario en el evento "al activar el registro" lo que he hecho es
buscar en la segunda tabla si existe el registro,
en caso de que exita lo comunicamos con un mensaje y deshabilitamos la
casilla de Verificación para que no se pueda
pulsar y por tanto ni copiar ni borrar nuevamente, y esto lo comprobará
siempre que cambies de registro.

- Si no quieres que te salga el mensaje, lo podrías cambiar por una etiqueta
(label) poniendo "Registro Copiado" y hacerla visible cuando el registro este
copiado
e invisible cuando no, pero esto es otra opción más o incluso puedes hacer
el mensaje y la etiqueta a la vez, lo que vos desee.

-Como la busqueda la he hecho con un recordset de ADO tendrás que activar su
referencia, si no sabes como hacerlo en los comentarios del ejemplo te digo
como
activarla.


http://cid-cb16876469337616.skydrive.live.com/self.aspx/P%c3%bablico/CopiaTabla2-Tabla3.mdb


Espero te sirva, ya cuentas algo.

0 new messages