PDA

Ver la Versión Completa : Problema auto_increment master/detalle Mysql


patan
18-07-2014, 23:12:11
Hola, les cuento que estoy con un problema que me esta rompiendo la cabeza, estoy haciendo un sistema de facturacion en Delphi XE2, usando como administrador de bd Mysql.
tengo 2 tablas: mv_movimiento (cabecera de la factura) con la clave id_movimiento, autoincrement
mv_detalle (detalle de factura) con un campo movimiento que apunta a mv_movimiento.id_movimiento
los pasos para grabar la factura -donde DM es el DataModule- son asi:

CARGA DE CABECERA DE FACTURA
Dm.Cmv_movimiento.Insert;
Dm.Cmv_movimiento.FieldByName('Id_movimiento').AsInteger:=0
//.... cargo los otros campos de la cabezera
// no hago post aca por las dudas que de algun error en la carga de items


despues recorro los items y los cargo

for filaux := 1 to col-1 do //ciclo de recorrido
begin
//CARGA DEL DETALLE
Dm.Cmv_detalle.Append;
Dm.Cmv_detalle.FieldByName('Id_detalle').AsInteger:=0;
...//cargo los otros campos del detalle
Dm.Cmv_detalle.FieldByName('movimiento').AsInteger:=????;


por supuesto dentro de try except

si no hay error al final de todo
Cmv_movimiento.Post;
Cmv_detalle.Post;
Los problemas son:
que id_movimiento uso para cargar en los items?
cuando comienza a recorrer los items del detalle para grabarlo me sale error de Key violation, esta bien hacer los post al final?
Estoy usando TsqlDataset-> TdatasetProvider(UpdateMode:upWhereKeyOnly)->Tclientdataset.

Espero haber sido claro, aunque a esta altura estoy mas que tildado.

MUCHAS GRACIAS!! SALUDOS

giulichajari
19-07-2014, 18:15:42
1-Si te refieres a los items de la compra? pues yo tengo una tabla ventas o tickets como quieras llamarle con e idproduco y el idticket o idmovimiento, es una relacion muchos a muchos porque un producto aparece en variops ticket y un ticket contiene varios productos.
Con respecto a la otra pregunta no se en que componente cargas los productos.

patan
22-07-2014, 23:39:56
Hola gracias por responder, en realidad lo que quiero es dejar la cabecera de la factura y todos los items en memoria y al final en caso de no surgir error realizar el post (pasarlos a la tabla)
Lo del ID de la cabecera lo solucione sacando el autoincrement de la bd, al numero lo genero desde el código
pero sucede que al recorrer el ciclo de carga de los items mientras hace "insert" lo va cargando en la tabla automaticamente y sin hacer post ¿? no entiendo.

Saludos