Visual Basic Foro
Programación => Bases de Datos => Mensaje iniciado por: Bazooka en Octubre 06, 2012, 09:33:02 am
-
Hola amigos necesito un metodo para vaciar la base de datos completa para utilizarla en otro cliente pero no quiero hacerlo tabla por tabla por que es demasiado pesado ese trabajo no creo que Microsoft no haya pensado un forma mas simple de dejar una BD limpia de una!!
Gracias!!
-
La verdad no conozco de una funcion que haga eso de un tiro, pero programarlo tampoco lo veo dificil. Digamos que tienes una BD con 200 tablas y pues.. da pereza borrar una por una. Lo que yo haria seria conectarme a la BD y luego desde VB6 hacer esto:
Dim rs As New ADODB.Recordset
sql = "SELECT * FROM information_schema.tables"
rs.Open sql, dB, 1, 1 'cambia db por tu conector.
For i = 1 to rs.recordcount
sql = "Delete From '" & Table_Name & "'"
dB.Execute sql, adCmdText
rs.MoveNext
Next i
checa bien el code porque lo estoy escribiendo al vuelo y por alli se me halla pasado algo pero la idea es esa.
Saludos
-
Mejor que Delete from, es Truncate, es "como si fuera delete" pero es mejor porque tarda menos tiempo (cuando tenes Millones y millones de registro), ensucia menos los log's de las base de datos, y Resetea los valores autonumericos. Es como si fuera un reseteo :P
Delete from primero hace un listado de lo que tiene que borrar, en cambio truncate borra todo directamente
Funciona de 2005 en adelante
Truncate Table - T-SQL - MSDN (http://msdn.microsoft.com/es-ES/library/ms177570%28v=sql.90%29.aspx)
-
Si había leído algo de eso, pero el amigo Miguel pidió para SQL 2000. En todo caso si fuese 2005 igual es una mejor forma pero usando la misma logica de recorrer todo el listado de tablas.
EDITO 1: Yo habia visto de pasada hace un tiempo sobre el truncate y que se aplicaba desde el SQL2005 y ya no le tome interes, pero ahora estoy revisando un poco mas sobre Truncate y al parecer si se puede aplicar (http://www.lawebdelprogramador.com/foros/SQL/1055265-RECUPERAR_DATOS_DE_UNA_TABLA_SQL_2000.html) en SQL 2000, bueno no tengo manera de probarlo, asi que por alli alguien nos pasa el dato y nos confirma esto.
EDITO 2: Confirmado, si se puede (http://msdn.microsoft.com/en-us/library/aa260621(v=sql.80).aspx)
-
OK ME FUNCIONO ASI!!
Private Sub Command1_Click()
Dim rs As New ADODB.Recordset
SQL = "SELECT * FROM information_schema.tables"
rs.Open SQL, NewConnection, 1, 1 'cambia db por tu conector.
On Error Resume Next
For i = 1 To rs.RecordCount
Table_Name = rs.Fields(2)
SQL = "TRUNCATE TABLE " & Table_Name
NewConnection.Execute SQL, adCmdText
rs.MoveNext
Next i
End Sub
pero un monton de tablas no se me borran por que tienen referencias!! supongo que a esas las deberia ir borrando manualmente.
PERO INSISTO !! COMO NO VA HABER COMO EN ACCES UNA FORMA DE COPIAR LA ESTRUCTURA NADA MAS!!!
-
pero un monton de tablas no se me borran por que tienen referencias!! supongo que a esas las deberia ir borrando manualmente.
PERO INSISTO !! COMO NO VA HABER COMO EN ACCES UNA FORMA DE COPIAR LA ESTRUCTURA NADA MAS!!!
1.- Quiza probar con usar Delete y luego borrar el log.
2.- Doc, tu pediste borrado no copiado de estructura.
3.- No puedes comparar Access (base de datos de escritorio / multiusuario) con SQL Server (base de datos Cliente Servidor) porque sencillamente SQL Server contempla mucho mas cosas como el uso de triggers, sp, permite acceso recurrente a un mismo registro, sistema de bloqueo, seguridad, fiabilidad en los datos, gestión de basura, etc etc etc, nada de eso tiene Access, no se le puede pedir a SQL Server la ejecución de operaciones tan wizard como las tiene Access por lo mucho que involucra, Access te admite muchas cosas a costa de posible pérdida de datos y eso justamente es lo mas vital.
Saludos
-
yo lo haria con un procedimiento almacenado y listo, va a ser muchisimo mas rapido que hacerlo desde el visual basic y mas si tenes por ejemplo cintos de miles de registros, ya que seria del lado del servidor y no tendra que recorrer registro por registro, simplemente llamar al SP y esperar el resultado.
por ahi en internet lo tenes con 3 lineas borras todo.
saludos.
-
Perdon por mi odiosa comparacion Ivan jaja sucede que tengo un soft con BD SQL2000 por que lo compre no por que yo lo hice y un poco a los ponchasos le meti mano y aprendi un poco por que siempre utilize Access.
Gracias a todos!!
-
Pasa que tenes que borrar de habajo hacia arriba... no podes borrar la tabla clientes sin haber borrado la tabla ventas (y peor aun, la de detalle de ventas) porque te salta la integridad referencial a la yugular...
En MySQL se puede hacer esto, no se si para ms sql vale...
DELETE c.*, v.*, vd.*
FROM clientes c
INNER JOIN ventas v ON c.id = v.clienteID
INNER JOIN ventasDetalle vd ON v.id = vd.idVenta;
Y santo remedio, te borra las 3 tablas en orden para que no sale nada de integridad....