![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
||||
|
||||
|
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. |
|
#2
|
||||
|
||||
|
He revisado tu código que adjuntas.
En :
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 : 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 ! |
|
#3
|
||||
|
||||
|
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 |
|
#4
|
||||
|
||||
|
Aquí tienes el código modificado como yo entiendo es más fácil y más simple.
Hay una cosa que debes de eliminar por tu cuenta, y es el Trigger en tu base de datos sobre la tabla Master. Cada vez que se añade un registro a Master, actua tanto el incremento del generador que has definido en DataModule2 sobre la tabla Master, como el propio Trigger de la Base de Datos. Esto provoca entre otras cosas que cada vez que añades un registro a Master, el generador ID aumente su valor en 2. Te darás cuenta que es mucho más simple que lo que tu imaginaste en un principio. Seguramente (lo he puesto como comentario dentro del propio código) no eras consciente tampoco que cada vez que cambias de registro en un DBGrid, se ejecuta automáticamente un POST por parte de Delphi, y eso provocaba que sobre LINEAS se realizaba un POST sin pulsar el botón de grabar, y por lo tanto si no existía el correspondiente registro en MASTER con el ID correcto daba error. Espero haberte ayudado. Si tienes cualquier otra duda, aquí estamos para ayudarte en lo que podamos. Mientras estoy subiendo el archivo ZIP creo recordar que no he cambiado la ruta de la base de datos. Está para la configuración de mi ordenador. Acuérdate de cambiarla correctamente en tu DataModule2 antes de compilar y ejecutar.
__________________
Piensa siempre en positivo ! |
|
#5
|
||||
|
||||
|
Mil gracias
![]() gluglu, funciona perfectamente. Lo mejor es lo más simple ... tengo que perder ciertos vicios.Ciertamente al estar dentro de una transacción, el tema de CachedUpdates sobra. Gracias |
|
#6
|
|||
|
|||
|
no lo veo claro
Hola, me veo en una situación muy parecida a la de morta71 y he despejado algunas dudas con este hilo pero en el código corregido por gluglu veo esto al hacer click en añadir:
Código Delphi [-] procedure TForm1.Button1Click(Sender: TObject); begin DataModule2.Master.Append; // El Generador es el que te incrementa automáticamente // el valor de ID. // Tienes que asegurarte que antes de insertar en LINEAS // se haga el POST con el ID correspondiente. DataModule2.Master.Post; // Por ello hago el Post aquí. end; Pero de esta manera no estamos insertando un registro vacío (bueno con su id) y luego mediante el autoedit de los dbedit editandolo? y luego vale, añadimos lineas de detalle sin problemas porque nos aseguramos que exista el registro maestro. Y si no puedo insertar un registro vacío (solo con su id) porque tengo campos obligados?? no puedo hacer un post justo después del append. He optado por hacer el post del master en el onnewrecord de lineas pero si el usuario no rellena los campos obligados antes de ponerse a insertar lineas en la factura CATACRAC, y eso no puede ser. No se... no lo veo claro. |
|
#7
|
||||
|
||||
|
Evidentemente la cosa se puede complicar todo lo que uno quiera.
Una cosa es el código simple que añadí a este hilo, como corrección del que puso morta71, y otra cosa muy diferente es cualquier otro código que se quiera programar. Lo único que hay que tener claro es que antes de hacer el Post del detalle, tiene que existir el correspondiente registro en el Maestro (que se habrá confirmado con su correspondiente Post en el Maestro). Las operaciones y comprobaciones que puedas o tengas que hacer previamente en el maestro, es asunto particular tuyo. En el código que adjunté, como precisamente no había que hacer ninguna comprobación ni nada parecido, y a fines de comprensión y aclaración, opté por poner el Post justo después del Append, que la verdad es que no se debería hacer nunca en condiciones normales. A lo mejor te puedo ayudar en algunas cosas más concretas. Si es así, te rogaría exponer un poco más del código que pretendes ejecutar. Saludos ![]()
__________________
Piensa siempre en positivo ! |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
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 |
|