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

Hacer una copia de una tabla?

Estas en el tema de Hacer una copia de una tabla? en el foro de Bases de Datos General en Foros del Web. A partir de la sentencia create table de SQL, puedo crear una tabla con diseño (campos,definicion,claves,etc.)identico a otra tabla?? y bueno... hablo de sql de ...
  #1 (permalink)  
Antiguo 28/04/2004, 03:50
Avatar de sowhat  
Fecha de Ingreso: mayo-2002
Ubicación: España, Valladolid
Mensajes: 152
Antigüedad: 22 años
Puntos: 0
Hacer una copia de una tabla?

A partir de la sentencia create table de SQL, puedo crear una tabla con diseño (campos,definicion,claves,etc.)identico a otra tabla?? y bueno... hablo de sql de access . Creo que no se podra pero por intentarlo....

Esto lo pregunto pq estoy haciendo una aplicacion desde visual basic que haga un guardar como de una tabla(osea k haga una copia de una tabla con otro nombre)y la verdad que me estoy complicando mucho y no me termina de salir, por eso quizas pense que desde sql era mas facil.

Ojo me refiero a la estructura (campos,claves,etc.), los datos los relleno sin problema con un insert into.
  #2 (permalink)  
Antiguo 28/04/2004, 04:23
 
Fecha de Ingreso: abril-2004
Mensajes: 48
Antigüedad: 20 años
Puntos: 0
Estoy seguro q con una única consulta se podría hacer, pero ahora no tengo a mano mi manual de sql...

Igualmente se me ocurre otra cosa, hacer dos instrucciones sql consecutivas:
1) SELECT Tabla1* INTO Tabla2 FROM Tabla1;
copias una tabla en otra nueva (datos incluidos)
2) DELETE * FROM Tabla 2
borras los datos de la 2ª tabla

Hay que reconocer que es un poco chapucero pero funcionar funciona y no es tan liado como lo que dices que estabas haciendo

Cuando pueda mirar en mi manual ya te diré si encuentro otra forma.
  #3 (permalink)  
Antiguo 28/04/2004, 04:40
Avatar de sowhat  
Fecha de Ingreso: mayo-2002
Ubicación: España, Valladolid
Mensajes: 152
Antigüedad: 22 años
Puntos: 0
Joder me he liado a lo tonto con lo sencillo que es eso , solo una cosa, con la instrucion
Código:
SELECT Tabla1.* INTO Tabla2 FROM Tabla1;
Efectivamente creo una nueva tabla con sus mismos campos y datos (no me hace falta borrar los datos pq en mi aplicacion los agregaba tb con otra consulta ), el problema esta en que la nueva tabla no tiene las claves de la vieja .

Habria forma de añadir las claves con lo que me has dicho?? Es que si tengo que usar alter table seria una movida gorda..., pq claro hago la aplicacion para cualquier tabla y seria un jaleo vamos.

Ya me diras cuando puedas,Gracias!

Última edición por sowhat; 28/04/2004 a las 04:46
  #4 (permalink)  
Antiguo 29/04/2004, 03:48
 
Fecha de Ingreso: abril-2004
Mensajes: 48
Antigüedad: 20 años
Puntos: 0
No me habia dado cuenta de que los indices no se copian. Personalmente no se me ocurre otra forma de hacerlo que no sea con el alter table.

Lo que podrias hacer, es que todos los indices se llamen siempre 'ID', por ejemplo. Así, puedes hacer la misma instrucción sql valida para cualquier tabla, con el alter table.

Siento no poder dedicar tiempo a investigar y darte una solucion mejor
  #5 (permalink)  
Antiguo 29/04/2004, 04:26
Avatar de sowhat  
Fecha de Ingreso: mayo-2002
Ubicación: España, Valladolid
Mensajes: 152
Antigüedad: 22 años
Puntos: 0
Es una solucion eso de id, muchas gracias de todas formas, ya hiciste bastante ;)
  #6 (permalink)  
Antiguo 29/04/2004, 08:16
 
Fecha de Ingreso: abril-2003
Ubicación: Madrid
Mensajes: 707
Antigüedad: 21 años
Puntos: 0
Para copiar una tabla utiliza

DoCmd.CopyObject "", "COPIA", acTable, "A1003"


COPIA, es el nombre de destino, "A1003" es la tabla origen

Un saludo
  #7 (permalink)  
Antiguo 30/04/2004, 02:42
Avatar de sowhat  
Fecha de Ingreso: mayo-2002
Ubicación: España, Valladolid
Mensajes: 152
Antigüedad: 22 años
Puntos: 0
Gracias una vez mas teri.

Lo unico que esa consulta seria valida para sql server y demas,no? Ahora con lo que estoy trabajando es con access

Salu2
  #8 (permalink)  
Antiguo 30/04/2004, 03:55
 
Fecha de Ingreso: abril-2003
Ubicación: Madrid
Mensajes: 707
Antigüedad: 21 años
Puntos: 0
Eso funciona para access, para hacer una copia de una tabla de SQL-Server, ahora mismo no sé como hacerlo de la misma manera

Investigo y te cuento
  #9 (permalink)  
Antiguo 30/04/2004, 05:07
Avatar de sowhat  
Fecha de Ingreso: mayo-2002
Ubicación: España, Valladolid
Mensajes: 152
Antigüedad: 22 años
Puntos: 0
nono, ke yo kiero para access no para sql server!!

Io es ke puse eso y me daba error, pero estoy pensando k eso ira delante de una select? Y como daba error pense k eso era para sql-server, pero lo kiero para access!!
  #10 (permalink)  
Antiguo 03/05/2004, 03:31
 
Fecha de Ingreso: abril-2003
Ubicación: Madrid
Mensajes: 707
Antigüedad: 21 años
Puntos: 0
Vale... entiendo... supongo que ya lo habrás resuelto, eso lo debes ejecutar por código Visual, en una función, un procedimiento...

Un saludo
  #11 (permalink)  
Antiguo 03/05/2004, 03:51
Avatar de sowhat  
Fecha de Ingreso: mayo-2002
Ubicación: España, Valladolid
Mensajes: 152
Antigüedad: 22 años
Puntos: 0
Perdon por mi torpeza Teri, pero no me entero jeje.

Al principio pense que eso era una consulta, osea que lo tenia que poner en la propiedad source del recordset. Pero veo que es para un procedimiento, funcion, etc.

Lo puse en el evento al pulsar un boton (por ej):

Código:
Private Sub Command3_Click()
DoCmd.CopyObject "", "tabla103", acTable, "tabla1"

End Sub
Para crear una copia de la tabla1 con nombre de tabla103, pero al ejecutarlo "actable" me da como variable no definida .

Tengo que añadir alguna referencia o algo??

Gracias por tu ayuda , salu2
  #12 (permalink)  
Antiguo 03/05/2004, 04:19
 
Fecha de Ingreso: abril-2003
Ubicación: Madrid
Mensajes: 707
Antigüedad: 21 años
Puntos: 0
Pues en principio no...

quítale las comillas del principio
  #13 (permalink)  
Antiguo 03/05/2004, 05:00
Avatar de sowhat  
Fecha de Ingreso: mayo-2002
Ubicación: España, Valladolid
Mensajes: 152
Antigüedad: 22 años
Puntos: 0
nada , me sigue diciendo lo mismo k variable no definida.
Lo deje asi:

DoCmd.CopyObject , "tabla103", acTable, "tabla1"
  #14 (permalink)  
Antiguo 03/05/2004, 06:03
 
Fecha de Ingreso: abril-2003
Ubicación: Madrid
Mensajes: 707
Antigüedad: 21 años
Puntos: 0
Prueba en una base de datos en blanco, crea una tabla para probar, y en un formulario, haces lo que has dicho, un botón, y en click, empieza a escribir la instrucción, no la copies tal cual, debería salirte la función, y los parámetros...

A ver si hay suerte...
  #15 (permalink)  
Antiguo 03/05/2004, 06:23
 
Fecha de Ingreso: abril-2004
Mensajes: 48
Antigüedad: 20 años
Puntos: 0
Teri, solo trabaja con una base de datos de access, no está usando los formularios de access, la aplicación la hace en visual basic.

Yo creo que te falta referir de donde son esas tablas, por que a la instruccion docmd.copytable le estas dando el nombre las tablas pero no de que base de datos. Yo diria que puede ser eso
  #16 (permalink)  
Antiguo 05/05/2004, 05:06
Avatar de sowhat  
Fecha de Ingreso: mayo-2002
Ubicación: España, Valladolid
Mensajes: 152
Antigüedad: 22 años
Puntos: 0
Exactamente trabajo con una bd en access 2000 pero SIN access, solo con visual.

Me da que no voy a poder usar ese comando, pq visual no me lo reconoce ni nada, ni lo encuentra la ayuda :(, intente hacerlo desde visual con adox pero era una movida mucho mas gorda y al final lo consegui pero no consegui copiar las claves principales xD osea que para eso uso la select k me dan arriba.
  #17 (permalink)  
Antiguo 06/05/2004, 01:04
 
Fecha de Ingreso: abril-2004
Mensajes: 48
Antigüedad: 20 años
Puntos: 0
Bueno, por lo menos se ha intentado. Pero habrá que seguir buscando algún sistema para conseguirlo


Hasta pronto y suerte
  #18 (permalink)  
Antiguo 06/05/2004, 01:59
 
Fecha de Ingreso: abril-2003
Ubicación: Madrid
Mensajes: 707
Antigüedad: 21 años
Puntos: 0
Comprueba una cosa...

el comando docmd.copy, es una instrucción de Acces, vale, pero en tus respuestas, decías que el error te lo daba por la constante acTable, no deja de ser una constante (vale 0), solo pon su valor, eso sí, debes modificar la función, el primer parámetro, indica la base de datos en la que hay que copiar, pon la ruta, o comprueba la ayuda en visual de la función

Suerte
  #19 (permalink)  
Antiguo 10/05/2004, 01:43
Avatar de sowhat  
Fecha de Ingreso: mayo-2002
Ubicación: España, Valladolid
Mensajes: 152
Antigüedad: 22 años
Puntos: 0
Solucion!!

Uff encontre la solución por fin , cacharreando con un proyecto que no eram mio vi que usaba la funcion docmd.

Codigo:

Código:
Dim MiBase As New Access.Application

Private Sub Command3_Click()
        MiBase.OpenCurrentDatabase (rutadelabd)
        MiBase.DoCmd.CopyObject ruta, nueva_tabla, acTable, tabla_vieja
        MiBase.CloseCurrentDatabase
        

   
End Sub
Luego tb hay que marcar la referencia Microsoft Access 10.0 Object Library.

Eso copia la tabla tal cual, eso si creo que hace falta tener access instalado en el pc ya que lo abre y luego cierra esa base de datos(pero access sigue abierto )

Menos da una piedra.......
  #20 (permalink)  
Antiguo 12/05/2004, 01:13
 
Fecha de Ingreso: abril-2004
Mensajes: 48
Antigüedad: 20 años
Puntos: 0
No es por desmoralizarte, pero que feo, no? Dejar el access abierto...

Aunque por lo menos ya lo tienes. Ha costado pero ya se copia la tabla completamente
  #21 (permalink)  
Antiguo 12/05/2004, 01:17
Avatar de sowhat  
Fecha de Ingreso: mayo-2002
Ubicación: España, Valladolid
Mensajes: 152
Antigüedad: 22 años
Puntos: 0
Joder ya te digo que queda feo, ahora estoy con otra cosa y tengo eso un poco olvidado, cuando me ponga con ello lo estudiare a fondo a ver si hay forma de que access no se quede abierto (que seguro que la hay).

Lo suyo seria que no hiciese falta tener access instalado......., pero a falta de pan.......
  #22 (permalink)  
Antiguo 12/05/2004, 01:43
 
Fecha de Ingreso: abril-2003
Ubicación: Madrid
Mensajes: 707
Antigüedad: 21 años
Puntos: 0
MiBase.Quit ¿¿¿¿????
  #23 (permalink)  
Antiguo 12/05/2004, 01:48
Avatar de sowhat  
Fecha de Ingreso: mayo-2002
Ubicación: España, Valladolid
Mensajes: 152
Antigüedad: 22 años
Puntos: 0
eo! Ahi le has dao!
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

SíEste tema le ha gustado a 2 personas (incluyéndote)




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