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)
-   -   Problema auto_increment master/detalle Mysql (https://www.clubdelphi.com/foros/showthread.php?t=86323)

patan 18-07-2014 23:12:11

Problema auto_increment master/detalle Mysql
 
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
Código Delphi [-]
  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

Código Delphi [-]
 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
Código Delphi [-]
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


La franja horaria es GMT +2. Ahora son las 09:25:05.

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