Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Conexión con bases de datos

 
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo Hace 1 Semana
wilcg wilcg is offline
Miembro
 
Registrado: abr 2014
Posts: 79
Poder: 4
wilcg Va por buen camino
Forma correcta de guardar un Maestro-Detalle

Amigos del foro un cordial saludo, necesito su ayuda con respecto a este tema de como es la manera mas correcta de guardar datos de un maestro-detalle
en la base de datos. Utilizo componentes UNIDAC y base de datos POSTGRESQL.

Tengo un ClientDataset en donde hay datos en memoria, lo que estoy haciendo es lo siguiente:

Código Delphi [-]
with UniQuery1 do
 begin

   try   
     // MAESTRO
     Close;
     SQL.Clear;
     SQL.Add('INSERT INTO factura ( '+
        ' id_factura, fecha_emision, id_proveedor, id_comprobante, observaciones ) VALUES ( '+
        ' :id_factura, :fecha_emision, :id_proveedor, :id_comprobante, bservaciones )
        );
     ParamByName('id_factura').Value         := iDFactura;
     ParamByName('fecha_emision').Value      := FormatDateTime( F_FF, edtFEmision.Date );
     ParamByName('id_proveedor').Value       := edtProveedor.Value;
     ParamByName('id_comprobante').Value     := edtComprobante.Value;
     ParamByName('observaciones').AsString   := edtObservaciones.Lines.Text;
     ExecSQL;

     // DETALLE
     if (ClientDataset1.Active) then
     begin
        Marca := ClientDataset1.Bookmark;

        ClientDataset1.First;
        while Not ClientDataset1.Eof do
        begin
          Close;
          SQL.Clear;
          SQL.Add('INSERT INTO detalles ( '+
            ' id_factura, id_producto, id_medida, cantidad, costo_unidad, precio_venta ) VALUES ( '+
            ' :id_factura, :id_producto, :id_medida, :cantidad, :costo_unidad, recio_venta )'
            );
          ParamByName('id_factura').Value          := iDFactura; 
          ParamByName('id_producto').Value         := ClientDataset1.FieldByName('id_producto').Value;
          ParamByName('id_medida').Value           := ClientDataset1.FieldByName('id_medida').Value;
          ParamByName('cantidad').AsFloat          := ClientDataset1.FieldByName('cantidad').AsFloat;
          ParamByName('costo_unidad').AsFloat      := ClientDataset1.FieldByName('costo_unidad').AsFloat;
          ParamByName('precio_venta').AsFloat      := ClientDataset1.FieldByName('precio_venta').AsFloat;
          ExecSQL;

        ClientDataset1.Next;
      end;

      ClientDataset1.Bookmark := Marca;
      Application.MessageBox(pchar(  'Registro creado correctamente.'),pchar(' Mensaje'),
            MB_OK+MB_ICONINFORMATION);
   except
     Application.MessageBox(pchar(  'Surgieron errores durante la creación del registro.'),
            pchar(' Mensaje'),MB_OK+MB_ICONERROR);

   end;

 end;

Si me pueden ayudar con este tema, o un ejemplo mucho mas correcto de realizar este tipo de operaciones.
Responder Con Cita
 


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
forma correcta de acceder y guardar en firebird con ibx anubis Lazarus, FreePascal, Kylix, etc. 16 01-03-2017 17:05:54
forma de programar no se si es la correcta ? gulder MySQL 4 05-04-2016 17:49:51
Maestro/Detalle - Forma correcta de dar Alta un registro pape19 Varios 7 16-06-2014 14:40:17
Guardar Maestro-Detalle (Problema super comun) sonjeux Conexión con bases de datos 2 19-02-2007 18:28:29
Cual es la Forma Correcta de Guardar Texto en un IbDataset con TcpServer???? AGAG4 Varios 0 10-12-2004 22:14:41


La franja horaria es GMT +2. Ahora son las 04:57:52.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi