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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 19-02-2007
sonjeux sonjeux is offline
Miembro
 
Registrado: jul 2004
Posts: 60
Poder: 14
sonjeux Va por buen camino
Question Guardar Maestro-Detalle (Problema super comun)

Saludos cordiales.

Estuve buscando bastante sobre este tema en el foro sobre mi problema pero no encontre respuestas, solo preguntas .

Bueno el problema que tengo es el siguiente, tengo dos tablas en mi base de datos hecha en Firebird, las tablas tienen masomenos la sigiente estructura

Tabla: Ingreso - Campos: ID(Llave Primaria), FECHA, COMENTARIO, PROVEEDOR, ALMACEN
Tabla: Ingreso_Detalles - Campos: ID(Llave Primaria), ID_INGRESO(Llave Foraena), ID_PRODUCTO, PRECIO, CANTIDAD

La relacion es 1-n

Ahora el campo ID de la tabla Ingreso lo necesito para la tabla Ingreso_Detalles en el campo ID_INGRESO.

Lo que hago es lo siguiente:

Primero en el formulario en el evento onshow pongo lo siguiente

IBIngresos.Close;
IBIngresos.Open;
IBIngresos.Append; //Aqui reservo un lugar en la base de datos

IBDetalles.Close;
IBDetalles.Open;

Luego empiezo a insertar los datos para la tabla Ingreso_Detalles, pero necesito el ID de la tabla Ingreso, pero este se genera mediante un trigger en firebird.

- Deseo saber por que al momento de insertar los datos en la tabla Ingreso_Detalles no se guarda el id de la tabla maestro Ingreso??. (Seguramente por que todavia no realize un post y no cuento con el id generado por firebird)

- No deberia funcionar esto, si lo puse en maestro-detalle, o sea al momento de guardar el maestro el detalle no deberia modificarse automaticamente y obtener el id del maestro para colocarlo en id_ingreso???

- Como puedo obtener el id que genero Firebird antes del post del maestro para usarlo en el detalle??

Espero que este masomenos claro lo que deseo hacer.

Gracias de antemano por su respuesta.
Responder Con Cita
  #2  
Antiguo 19-02-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 22
Lepe Va por buen camino
Según parece usas los componentes Interbase, que en el futuro podrían darte problemas con incompatibilidades, si estas a tiempo, puedes usar MDOLIB, que también son libres y cumplen su función muy bien.

En MDOLIB, (supongo que en IB también lo tienes) en el Dataset tendrá una propiedad GeneratorField, que identifica el generador a usar y cuando usarlo, tienes 3 posibilidades (waServer, waPost, waNewRecord), con waPost funciona como quieres.

En Interbase, hay una variable llamada CopyMasterFieldToDetail en la unidad IBUtils.Pas, figura en la línea 85 y 360 de ese archivo y se usa también en los descendientes de IBCustomDataset. Poniendo esa variable Booleana en True se supone hace lo que quieres.

Acabo de mirar el código de OnNewRecord para IB y en el código aparece:
Código Delphi [-]
begin
  if FGeneratorField.ApplyEvent = gamOnNewRecord then
    FGeneratorField.Apply;
  if CopyMasterFieldToDetail then
  begin
    if FDataLink.DataSource <> nil then
      if FDataLink.DataSource.DataSet <> nil then
        SetFieldsFromParams;
  end;
  inherited DoOnNewRecord;
end;

Visto esto, en el OnNewRecord también funcionaría... aunque puede darte mucha lata crean un registro vacío y después cancelan dicho registro (el Generador se incrementará en cada OnNewRecord)

Espero que alguno de estos comentarios te sirva.

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.

Última edición por Lepe fecha: 19-02-2007 a las 12:34:06.
Responder Con Cita
  #3  
Antiguo 19-02-2007
sonjeux sonjeux is offline
Miembro
 
Registrado: jul 2004
Posts: 60
Poder: 14
sonjeux Va por buen camino
Gracias por tu respuesta, ahora voy a ver eso .

Tambien voy a ver de usar MDOLIB o ADO :P.

Saludos
Responder Con Cita
Respuesta


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
Problema tabla Maestro-detalle en la q la pk de t.detalle formad por 2cods de la maes akinom38 Varios 1 09-11-2007 19:27:44
Problema con maestro detalle escullar Impresión 2 21-12-2005 09:53:01
Problema con Maestro-Detalle AGAG4 Firebird e Interbase 8 11-09-2004 18:23:38
Problema con Maestro-Detalle AGAG4 Firebird e Interbase 2 20-08-2004 15:51:14
Problema con Maestro-Detalle AGAG4 Varios 0 17-08-2004 02:56:45


La franja horaria es GMT +2. Ahora son las 13:09:30.


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