![]() |
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. |
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: |
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. |
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: Así se borra la factura y todas las lineas. |
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 |
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. Saludos |
ok. ya esta muchas gracias por todo LEPE:)
|
La franja horaria es GMT +2. Ahora son las 06:48:13. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi