Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 30-03-2007
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.572
Poder: 27
egostar Va camino a la fama
Una pregunta, en el archivo MASTER ¿ya tienes datos?

Por lo poco que he visto si no exiten datos en MASTER te puede enviar un error porque no encuentra la referencia al momento de grabar datos en LINEAS.

Salud OS.
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #2  
Antiguo 31-03-2007
Avatar de morta71
morta71 morta71 is offline
Miembro
 
Registrado: may 2006
Ubicación: Girona - España
Posts: 33
Poder: 0
morta71 Va por buen camino
MASTER viene a ser por ejemplo la tabla FACTURAS, con sus respectivas líneas.

Con Paradox, puedo generar en el mismo formulario tanto la cabecera de MASTER (o Facturas si preferis), e ir añadiendo registros en LINEAS, todo ello con CachedUpdated activado. Al hacer un Post con Paradox funciona sin ninguna queja ... pero con Firebird no es lo mismo.

Os adjunto los fuentes, está realizado en Delphi 5 profesional.

Gracias
Archivos Adjuntos
Tipo de Archivo: zip master.zip (3,5 KB, 21 visitas)
Responder Con Cita
  #3  
Antiguo 31-03-2007
Avatar de Héctor Randolph
[Héctor Randolph] Héctor Randolph is offline
Miembro Premium
 
Registrado: dic 2004
Posts: 882
Poder: 22
Héctor Randolph Va por buen camino
Hola morta71!

Si estás utilizando una transacción con Interbase, supongo que no será necesario por lo pronto usar actualizaciones en Caché.

Olvidando un poco ese detalle, ¿quién te garantiza que dentro de la transacción actual, se guardan primero los cambios en la tabla maestro y después los cambios en la tabla detalle?.

Por ejemplo, si la tabla maestro estuviera dentro de su propia transacción y la tabla detalle en otra, tu podrías determinar el orden en el cuál se aplican los cambios usando primero Commit en el maestro y después en el detalle. Es probable que de la manera que lo haces actualmente primero se intentar guardar los registros del detalle y no encuentra el registro del maestro simplemente porqué aún no han sido guardados.

Saludos
Responder Con Cita
  #4  
Antiguo 31-03-2007
Avatar de morta71
morta71 morta71 is offline
Miembro
 
Registrado: may 2006
Ubicación: Girona - España
Posts: 33
Poder: 0
morta71 Va por buen camino
Hola Héctor, lo que me comentas tiene sentido, pero yo lo que quiero es que se grabe todo en una misma transacción. Es decir, que si falla al grabar en LINEAS no se actualice MASTER.

Sinembargo, lo que me comentas puedo probrarlo. Sería algo así como realizar una transacción dentro de otra, es decir Transaccion1 que englobaría a MASTER y LINEAS, y Tansaccion2 que se refiere sólo a la tabla MASTER.

De ésta manera realizo primero un Commit en Transaccion2 y después el Commit en Transaccion1. Si en Transaccion1 hay algun fallo, supongo que en el Rollback deshace también Transaccion1???????

Lo probaré a ver que sucede.

Gracias
Responder Con Cita
  #5  
Antiguo 31-03-2007
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 23
gluglu Va por buen camino
Yo no veo el sentido de utilizar dos transacciones diferentes. Como bien dice morta71, si no se graban LINEAS, para qué actualizar MASTER.

A mi me funciona sin problema, al menos en INTERBASE. Lo que si hay asegurarse en cualquier caso es que hagas un POST de MASTER antes de insertar una nueva línea en LINEAS.

Lo que comentas acerca de desasignar el DataSource antes del Post, yo no lo hago nunca, y no tengo problemas.
__________________
Piensa siempre en positivo !

Última edición por gluglu fecha: 31-03-2007 a las 14:24:47.
Responder Con Cita
  #6  
Antiguo 31-03-2007
Avatar de gluglu
[gluglu] gluglu is offline
Miembro Premium
 
Registrado: sep 2004
Ubicación: Málaga - España
Posts: 1.455
Poder: 23
gluglu Va por buen camino
He revisado tu código que adjuntas.

En :
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
  DataModule2.Master.Append;
end;

lo que estás haciendo es un Append, y junto con el Generador que tienes puesto estás incremento ese generador en 1. Pero no estás realizando el POST correspondiente, que es la razón principal del error que te está dando.

Al pulsar el Button3 y ejecutar :
Código Delphi [-]
procedure TDataModule2.MasterAfterPost(DataSet: TDataSet);
begin
  Lineas.Post;

  IBDatabase.ApplyUpdates([Master, Lineas]);
  IBTransaction.CommitRetaining;

  Lineas.DataSource := dsMaster;
end;
me dá error en la primera línea ya que Lineas no está en Modo Edit y por lo tanto no se puede realizar un Post de Líneas.

O eso es al menos lo que me parece a mi.

La cuestión es que te has liado mucho en tu código cuando es más fácil de lo que te imaginas.

Haciendo algunos cambios en tu código como eliminar todo el código de MasterAfterPost a mi me funciona, aunque mi manera de programar será difente a la tuya.

Todo el error del Foreign Key viene porque te tienes que ASEGURAR que antes de que ejecutes el Post de la tabla LINEAS, tiene que estar hecho el POST de MASTER.

Espero haberte ayudado un poco.
__________________
Piensa siempre en positivo !
Responder Con Cita
  #7  
Antiguo 31-03-2007
Avatar de morta71
morta71 morta71 is offline
Miembro
 
Registrado: may 2006
Ubicación: Girona - España
Posts: 33
Poder: 0
morta71 Va por buen camino
Gracias por vuestras respuestas, pero en cada prueba obtengo el mismo error .

Si hago lo que me indicas, gluglu, no da error porque no hago el Post en Lineas, pero en cuanto intento actualizar Lineas ... zas el error.

Si te funciona, te importa, por favor, enviarme el ejemplo corregido (mi e-mail es [email protected])

Gracias
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
Dá error "Master has detail records" cuando no debería darlo! JuanBCT Tablas planas 3 06-08-2005 03:48:37
DBLookupComboBoxs Master/Detail o Detail/Master yusnerqui OOP 5 29-07-2005 18:40:20
master/detail, imprimiendo master en cada hoja acalderonr Impresión 4 29-11-2003 14:46:07
interbase:¿como crear un master-detail-detail? ElSanto24 Firebird e Interbase 2 22-10-2003 10:24:45
Master/Detail/Detail/Detail/etc... hgiacobone Tablas planas 2 24-07-2003 17:20:31


La franja horaria es GMT +2. Ahora son las 07:56:58.


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