Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Por que no me puede borrar registros (https://www.clubdelphi.com/foros/showthread.php?t=33160)

JoanKa 28-06-2006 21:32:07

Por que no me puede borrar registros
 
Hola a todos una consulta.

Les cuento que estoy haciendo un maestro-detalle de una factura, lo que pasa es que cuando doy sobre el boton cancelar ejecuto esta sentencia pero no logo eliminar los registros:

consulta_eliminar := 'DELETE FROM T_LINEAS_FACTURAS WHERE FACT_CODIGO = ' + IntToStr(TBL_LINEAS_FACTURA.FieldByName('FACT_CODIGO').AsInteger);
QRY_ELIMINAR_LINEAS.Close;
QRY_ELIMINAR_LINEAS.SQL.Clear;
QRY_ELIMINAR_LINEAS.SQL.Add(consulta_eliminar);
QRY_ELIMINAR_LINEAS.ExecSQL;
TBL_FACTURAS.Cancel;
TBL_FACTURAS.Last;

Lo que pasa que primeramente estoy en un formulario donde estan los paneles de cliente, lineas de la factura y totales, entonces cuando deseo agregar un articulo me voy a otro formulario donde estan todos los articulos y de alli selecciono el que deseo y coloco la cantidad y cuando presiono sobre un boton que dice "Enviar a factura" y me lo envia y me lo graba en la tabla T_LINEAS y asi sigo ingresando articulos pero cuando le digo cancelar factura, me debe borrar los registros de T_LINEAS, e inclusive e evaluado la variable consulta_eliminar me lo hace bien ya que recibo bien el numero de factura PERO NO ME LO ELIMINA QUE PUEDE ESTAR PASANDO.

E inclusive me ido al IB EXPERT y como los articulos estan en T_LINEAS ejecuto por ejmplo un SELECT * FROM T_LINEAS WHERE FACT_CODIGO='1520' y si obtengo los registros, pero cuando hago la eliminacion mediante codigo de ejecucion, es decir, desde el sistema no me lo hace.

Donde puede estar el fallo.

Uso DELPHI 2005 y e Interbase

Gracias y saludos.

BlueSteel 28-06-2006 21:47:24

Hola.. yo tenia un problema similar.. pero con un Sistema de Ordenes de Compra....

teniendo los sgtes tablas
- Proveedores // listado de proveedores
- CentroCosto // listado de centros de costos
- Orden // registro de ordenes emitidas
- DetalleOrden // registro de los items de la orden de compra
- Cargo // registro asignacion de cargos a diferentes centros de costos

NOTA: No use una de articulos, ya que nunca se compra lo mismo, ni tampoco al mismo proveedor, por lo que no era necesario estar almacenando articulos....

En primer lugar, lo que hice fue ir almacenando en una tabla temporar todos los detalles de la orden (DetalleOrdenBK) y todos los posibles cargos (CargoBK),,,, y una vez todo listo ponian cancelar... borraba los registros de la tablas temporares....

Ahora.. que me origino esto... como se trabaja en red... una tabla podia mezclar items de 2 ordenes diferentes y si le ponia cancelar podia anular los datos de la otra orden de compra (además, el Nro de la Orden de Compra se asigna en forma correlativa.. y solo cuando se presiona el boton procesar o almacenar...)

Para evitar este tipo de problemas, lo que hice fue trabajar con un StringGrid, en donde almacenaba todos los items de las ordenes de compra (con opcion de modificar, eliminar y agregar mas items), y otro StringGrid para procesar los Cargos.... una vez que ponia almacenar.. traspasaba todos los datos... y si ponia cancelar.. destruia el formulario...

espero que te sirva :rolleyes:

nemesio 29-06-2006 03:33:16

prueba de esta manera


Código Delphi [-]
consulta_eliminar := 'DELETE FROM T_LINEAS_FACTURAS WHERE FACT_CODIGO = :CODIGO'QRY_ELIMINAR_LINEAS.Close;

QRY_ELIMINAR_LINEAS.Close;
QRY_ELIMINAR_LINEAS.SQL.Clear;
QRY_ELIMINAR_LINEAS.SQL.Add(consulta_eliminar);

QRY_ELIMINAR_LINEAS.PARAMBYNAME('CODIGO').Value:=TBL_LINEAS_FACTURA.FieldByName('FACT_CODIGO').Value ;QRY_ELIMINAR_LINEAS.ExecSQL;
Suerte.

Lepe 29-06-2006 10:48:12

Si estas trabajando con Interbase, habrás establecido el borrado en cascada, de tal forma que al borrar la factura se debe borrar todas las lineas automáticamente. Si no lo has hecho... deberías ;), simplemente en la tabla T_lineas_factura, indica que el campo foráneo (clave ajena) codigo factura tiene borrado en cascada.

Para borrar:
Primero cancelas la factura tblFacturas.Cancel y despues lanzas la consulta de borrado:

Código SQL [-]
delete from CAbecera_facturas where codigo = 1520
Así se borra la factura y todas las lineas.

JoanKa 29-06-2006 16:37:11

Hola tengo estas tablas : Haber si me aclaro, parece que me estoy equivocando... aca van las tablas

CREATE TABLE T_FACTURA (
FACT_CODIGO PK (Clave Primaria)
CLI_CODIGO
FACT_FECHA_ALTA
.....
);

CREATE TABLE T_LINEAS_FACTURAS (
FACT_CODIGO PK(Clave Primaria)
LIN_NUMERO PK(Clave Primaria)
ARTI_CODIGO
LIN_CANTIDAD
.......
);

DICE Lepe:
Si estas trabajando con Interbase, habrás establecido el borrado en cascada, de tal forma que al borrar la factura se debe borrar todas las lineas automáticamente. Si no lo has hecho... deberías ;), simplemente en la tabla T_lineas_factura, indica que el campo foráneo (clave ajena) codigo factura tiene borrado en cascada.


Como establesco la relacion de BORRADO EN CASCADA EN INTERBASE :(

Si es necesario hago las tabla o los modifico de nuevo ya que quiero que esto quiero que quede bien.

Gracias y Saludos a todos

Lepe 30-06-2006 10:31:49

Usa el IB Expert (en su version personal es gratuito)

Abres la tabla, añades el campo de Tipo Integer (casi siempre son integers ;)), vas a pestaña Constraints, dentro a la pestaña Foreign Key y despues añades la restricción, a la derecha tienes las reglas de integridad.
Código SQL [-]
CREATE TABLE ESTADO (
    IDESTADO  INTEGER NOT NULL,
    ESTADO    ALIAS COLLATE ES_ES /* ALIAS = VARCHAR(25) */
);

CREATE TABLE OBRA (
    IDOBRA        INTEGER NOT NULL,
    IDCLIENTE     INTEGER NOT NULL,
    IDESTADO      INTEGER
);

/******************************************************************************/
/****                             Primary Keys                             ****/
/******************************************************************************/

ALTER TABLE ESTADO ADD CONSTRAINT PK_ESTADO PRIMARY KEY (IDESTADO);
ALTER TABLE OBRA ADD CONSTRAINT PK_OBRA PRIMARY KEY (IDOBRA)
USING DESCENDING INDEX PK_IDOBRA;


/******************************************************************************/
/****                             Foreign Keys                             ****/
/******************************************************************************/

ALTER TABLE OBRA ADD CONSTRAINT FK_OBRA_1 FOREIGN KEY (IDCLIENTE) REFERENCES CLIENTE (IDCLIENTE) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE OBRA ADD CONSTRAINT FK_OBRA_2 FOREIGN KEY (IDESTADO) REFERENCES ESTADO (IDESTADO) ON DELETE CASCADE ON UPDATE CASCADE;
Saludos

JoanKa 30-06-2006 11:08:09

ok. ya esta muchas gracias por todo LEPE:)


La franja horaria es GMT +2. Ahora son las 06:08:20.

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