PDA

Ver la Versión Completa : Vaciado de ciertas tablas en Interbase 6


gorsan
31-10-2007, 13:39:35
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
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
Si tienen foreign key.

/* 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:

Delete from tabla where <condicion>

gorsan
31-10-2007, 17:03:31
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
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
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:

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:

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:

Delete from EXTERNOS_DNI

Y listo, el detalle tambien se eliminaria ;).

gorsan
31-10-2007, 18:58:40
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
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
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
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... :)

Verbo pronominal

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