Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Limpiar una base de datos (https://www.clubdelphi.com/foros/showthread.php?t=71962)

ingabraham 20-01-2011 21:21:27

Limpiar una base de datos
 
firebird 2.0 y delphi 7

Como puedo limpiar con un boton una base de datos:

la cual contiene tablas con sus llaves foraneas y generadores

no se si se puede recorrer tablas (teniendo pendiente q hay fk) y generadores dejarlos en cero.

Enan0 20-01-2011 21:33:27

Si tenes las estructuras de las trablas podes hacer un Drop table una por una (con jerarquia da abajo asía arriba ) y despues crear las tablas nuevamenta

o sino, hacer un Delete de los campos tambien desde la tabla de jerarquia mas baja hasta la mas alta

saludos

Chris 20-01-2011 22:09:50

Si eliminas las tablas es más complicado, pues tendrás que tener en cuenta que unas tablas puedan depender de otras, o los disparadores dependan de una o más tablas. Sería un solo enrollo y cada caso es único pues depende de la estructura en si de la base de datos. Si te referías a que si había una instrucción especial para dejar la base de datos como nueva, algo así como "DROP TABLES..." pues no existe en Firebird. No es común eso hacer algo así sobre la DB.

Creo que lo más que te conviene es eliminar todos los registros de las tablas y poner los generadores a 0. De hecho pienso que eso es lo que quieres. Para hacer eso, simplemente ejecuta un "delete from <tabla>" en cada una de las tablas de tu base de datos, empezando por las que dependan de llaves foráneas. Para reiniciar los generadores, bastará con un: "SET GENERATOR <nombre_del_generador> TO 0;".

Saludos,
Chris

Casimiro Noteví 20-01-2011 22:12:24

También puedes:
  1. desconectar de la base de datos
  2. borrarla
  3. ejecutar el script de creación de la misma
  4. volver a conectar, ahora ya será la nueva

De todas formas esto no es nada habitual, puede que no se tenga permisos, que no se sepa en qué servidor esté alojada, etc.

ingabraham 21-01-2011 16:14:34

Ojo no se si me hice entender
no es borrar fisicamente tablas

si no borrar registro con
delete from

y por eso pregunto no se si hay algun codigo para recorrer tablas
depronto en un ciclo o algo asi.

roman 21-01-2011 16:24:16

Cita:

Empezado por Chris (Mensaje 388127)
Para hacer eso, simplemente ejecuta un "delete from <tabla>" en cada una de las tablas de tu base de datos, empezando por las que dependan de llaves foráneas.

¿No hay manera en Firebird de deshabilitar generadores, disparadores, relaciones, etc. para no tener que estar viendo dependencias? Digo, porque para una operación así, de limpieza, me parece que sería lo más sencillo.

Por otra parte, creo que ingabraham busca cómo acceder a la metadata para tener un listado de todas las tablas de la base y así poder ciclar sobre ellas.


// Saludos

Enan0 21-01-2011 16:27:00

No se firebird pero algunos Motores soporta TRUNCATE TABLE (nombre de Tabla) Que suele ser un poco mas rapido que el Delete from ..

La verdad que no recuerdo bien la diferencia pero, una que si recuerdo es que el Truncate no se guarda en el LOG de transaccion

yo recuerdo haberla usado ya que es mas rapido que el Delete, cuando tenes muchos datos el Delete puede tardar.. un buen Rato.

Truncate no soporta WHERE o condiciones de filtrado, hasta donde recuerdo, todo puede fallar.

Creo que esta te podria servir.

saludos

Chris 21-01-2011 17:29:22

Cita:

Empezado por roman (Mensaje 388240)
¿No hay manera en Firebird de deshabilitar generadores, disparadores, relaciones, etc. para no tener que estar viendo dependencias? Digo, porque para una operación así, de limpieza, me parece que sería lo más sencillo.

Solo puedes deshabilitar los disparadores. Pero aún estado deshabilitados Firebird maneja las dependencias que éstos tienen y no te dejará eliminar alguna de ellas. Pero este lío solo tienes que manejarlo en caso de que eliminaras las tablas, de menos no. Debes solo debes tener cuidado con las claves foráneas si es que solamente vas a eliminar los registros.

Como dato extra, la validación de las claves foráneas se manejan en disparadores internos, que creo puedes deshabilitarlos. Una vez deshabilitados ya puedes dejar de preocuparte por las llaves foráneas. Sin embargo, considero que es más práctico y fácil cuidar las llaves foráneas que intentar averiguar cuáles son los nombre de cada uno de estos disparadores especiales.

Saludos,
Chris

Lepe 21-01-2011 18:59:33

Estoy con Casimiro en que es mucho más fácil extraer toda la metadata (con ibexpert free por ejemplo) y después ejecutarla para crear una nueva.

El resultado es el mismo, pero evitando toda la parafernalia que pintas:
- desactivar triggers
- dependencias entre tablas
- reiniciar generadores
- activar triggers


... y eso teniendo suerte, porque en cuanto tengas una referencia cíclica, estoy seguro tendrás más trabajo.


La franja horaria es GMT +2. Ahora son las 18:02:07.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi