Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 20-01-2011
Avatar de ingabraham
ingabraham ingabraham is offline
Miembro
 
Registrado: ago 2007
Posts: 614
Poder: 17
ingabraham Va por buen camino
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.
__________________
Enseñar es la virtud de un sabio.
Responder Con Cita
  #2  
Antiguo 20-01-2011
Avatar de Enan0
Enan0 Enan0 is offline
Miembro
 
Registrado: may 2004
Ubicación: Argentina
Posts: 565
Poder: 20
Enan0 Va por buen camino
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
Responder Con Cita
  #3  
Antiguo 20-01-2011
Avatar de Chris
[Chris] Chris is offline
Miembro Premium
 
Registrado: abr 2007
Ubicación: Jinotepe, Nicaragua
Posts: 1.678
Poder: 19
Chris Va por buen camino
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
__________________
Perfil Github - @chrramirez - Delphi Blog - Blog Web
Responder Con Cita
  #4  
Antiguo 20-01-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.043
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
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.
Responder Con Cita
  #5  
Antiguo 21-01-2011
Avatar de ingabraham
ingabraham ingabraham is offline
Miembro
 
Registrado: ago 2007
Posts: 614
Poder: 17
ingabraham Va por buen camino
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.
__________________
Enseñar es la virtud de un sabio.
Responder Con Cita
  #6  
Antiguo 21-01-2011
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por Chris Ver Mensaje
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
Responder Con Cita
  #7  
Antiguo 21-01-2011
Avatar de Enan0
Enan0 Enan0 is offline
Miembro
 
Registrado: may 2004
Ubicación: Argentina
Posts: 565
Poder: 20
Enan0 Va por buen camino
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
Responder Con Cita
  #8  
Antiguo 21-01-2011
Avatar de Chris
[Chris] Chris is offline
Miembro Premium
 
Registrado: abr 2007
Ubicación: Jinotepe, Nicaragua
Posts: 1.678
Poder: 19
Chris Va por buen camino
Cita:
Empezado por roman Ver Mensaje
¿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
__________________
Perfil Github - @chrramirez - Delphi Blog - Blog Web
Responder Con Cita
  #9  
Antiguo 21-01-2011
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
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.
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Insertar Datos a un campo de la base de datos desde un DBEdit saltamirano Varios 11 12-12-2007 17:29:35
Crear base de datos y cargar datos desde delphi Albano MySQL 4 17-05-2007 20:01:18
Herramienta case para diccionario de datos de base de datos firebird mcalmanovici Firebird e Interbase 1 11-02-2007 15:17:37
Guardar en 1 base de datos SQL, datos procedentes de 2 tablas distintas adaypr C++ Builder 1 05-09-2006 11:56:33
Reto Para Expertos En Base De Datos Y Tipos De Datos.... (blob) frankmch Conexión con bases de datos 2 08-09-2003 19:44:52


La franja horaria es GMT +2. Ahora son las 06:42:09.


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