Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Vaciado de ciertas tablas en Interbase 6 (https://www.clubdelphi.com/foros/showthread.php?t=49829)

gorsan 31-10-2007 13:39:35

Vaciado de ciertas tablas en Interbase 6
 
Buenos días.
Necesito bien una utilidad, bien un método para incluir en una aplicación, segun el cual yo pueda vaciar de datos una/s tabla/s en Interbase 6. La parte cliente la estoy realizando con Delphi 7.

Muchas gracias.

jhonny 31-10-2007 13:57:18

Cita:

Empezado por gorsan (Mensaje 242587)
Buenos días.
Necesito bien una utilidad, bien un método para incluir en una aplicación, segun el cual yo pueda vaciar de datos una/s tabla/s en Interbase 6. La parte cliente la estoy realizando con Delphi 7.

Muchas gracias.

¿Pero necesitas tener en cuenta el orden en que se deben eliminar esos datos por "culpa" de los Foreing Key o esas tablas no tienen Foreing Key?

gorsan 31-10-2007 14:07:43

respuesta
 
Si tienen foreign key.
Código SQL [-]
/* Domain definitions */
CREATE DOMAIN "DOC_NAL_IDEN" AS INTEGER
   CHECK (VALUE>=1 AND VALUE<=99999999);

/* Table: MOV_EXTERNOS_DNI, Owner: SYSDBA */

CREATE TABLE "MOV_EXTERNOS_DNI" 
(
  "DNI2"  "DOC_NAL_IDEN" NOT NULL,
  "DIA_ENTRADA"  TIMESTAMP,
  "DIA_SALIDA"  TIMESTAMP
);
ALTER TABLE "MOV_EXTERNOS_DNI" ADD CONSTRAINT "MOVIMIENTO_DNI" FOREIGN KEY ("DNI2") REFERENCES EXTERNOS_DNI ("DNI1") ON DELETE CASCADE;
ALTER TABLE "MOV_EXTERNOS_DNI" ADD CONSTRAINT "MOVIMIENTO_DNI_2" FOREIGN KEY ("DNI2") REFERENCES EXTERNOS_DNI ("DNI1") ON UPDATE CASCADE;

La idea es que el usuario las vacie cuando tengan un cierto tamaño ya que no interesa que crezcan demasiado. O, en su defecto, eliminarlas yo como administrador.

jhonny 31-10-2007 14:26:47

Bueno, podriamos hacer un SP muy divertido, pero sinceramente no entendí muy bien cuales son los limites que debe tener dicho barrido de información... asi a simple vista y teniendo en cuenta que tu mismo haras ese trabajo, sería un simple:

Código SQL [-]
Delete from tabla where 

gorsan 31-10-2007 17:03:31

respuesta
 
Lo de SP seria lo mas indicado. Necesito vaciar por completo la tabla que quede con cero registros y de la manera mas rapida y menos gravosa posible.
Hablas de un SP pero ¿como?

gorsan 31-10-2007 17:09:06

respuesta
 
Pensabaque podia haber una sentencia que lo hiciera de un golpe tal como en Paradox: Table1.EmptyTable; o parecido

jhonny 31-10-2007 17:17:02

Cita:

Empezado por gorsan (Mensaje 242628)
Pensabaque podia haber una sentencia que lo hiciera de un golpe tal como en Paradox: Table1.EmptyTable; o parecido

Claro, puedes hacerlo como te lo indique arriba, con un simple:

Código SQL [-]
Delete from tabla

Ya eliminarias todos los datos de la tabla, en paradox puedes hacerlo a cualquier tabla porque seguramente Paradox no tiene Foreing Keys, pero en FireBird o Interbase ya cuentas con los Foreing Keys, entonces si tratas de eliminar los datos de un encabezado (Por ejemplo) te mostrara un error ya que dichos datos estan siendo usados por un detalle ¿Vez?

Pero no es tan complicado, pensandolo bien, ni siquiera necesitas un SP, colocando los Foreing Key en cascade tipo delete ya resolveria el problema, porque en ese caso solo sería cuestión de hacer un simple Delete from encabezado y automaticamente se eliminarian los registros del detalle ;),

jhonny 31-10-2007 17:20:01

Ahhh, es mas ya tienes esos Foreing Key en cascade on delete:

Código SQL [-]
ALTER TABLE "MOV_EXTERNOS_DNI" ADD CONSTRAINT "MOVIMIENTO_DNI" FOREIGN KEY ("DNI2") REFERENCES EXTERNOS_DNI ("DNI1") ON DELETE CASCADE;

Solo sería cuestión de eliminar el encabezado, asi:

Código SQL [-]
Delete from EXTERNOS_DNI

Y listo, el detalle tambien se eliminaria ;).

gorsan 31-10-2007 18:58:40

respuesta
 
Ya, pero con esto me cepillo tanto los datos de las tablas principales como los de las secundarias y yo solo quiero cargarme (vaciar de datos) la tabla MOV_EXTERNOS_DNI no la EXTERNOS_DNI. Esta ultima tiene que conservar intactos sus datos.
¿como hago esto?

jhonny 31-10-2007 19:16:10

Cita:

Empezado por gorsan (Mensaje 242686)
Ya, pero con esto me cepillo tanto los datos de las tablas principales como los de las secundarias y yo solo quiero cargarme (vaciar de datos) la tabla MOV_EXTERNOS_DNI no la EXTERNOS_DNI. Esta ultima tiene que conservar intactos sus datos.
¿como hago esto?

Bueno, MOV_EXTERNOS_DNI es quien hace referencia EXTERNOS_DNI, entonces en ese caso no tendras problema en hacer delete from MOV_EXTERNOS_DNI, esto ultimo no eliminara los datos de EXTERNOS_DNI ;).

gorsan 31-10-2007 20:28:59

respuesta
 
Ok asi es.

Muchas gracias por tu tiempo. Cuando uno se obceca en algo no lo ve ni aunque lo tenga delante de sus narices.

Saludos.

jhonny 31-10-2007 20:38:31

Cita:

Empezado por gorsan (Mensaje 242718)
Ok asi es.

Muchas gracias por tu tiempo. Cuando uno se obceca en algo no lo ve ni aunque lo tenga delante de sus narices.

Saludos.

Que bueno que ha salido bien el asunto, pero ahora que ya haz salido del lio, aprovecho para preguntarte ¿Que es obceca?.

jhonny 31-10-2007 20:41:08

Ahhh, ya lo encontre... :)

Cita:

Empezado por diccionarios.com
Verbo pronominal

Mantenerse excesivamente firme en una idea, intención u opinión, generalmente poco acertada, sin tener en cuenta otra posibilidad. obcecarse



La franja horaria es GMT +2. Ahora son las 17:39: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