Delphi - Ayuda con cabecera-detalle o master-detail

 
Vista:

Ayuda con cabecera-detalle o master-detail

Publicado por Valentín Guardamino (2 intervenciones) el 21/12/2001 19:24:21
Estoy haciendo un programa y tengo el problema de que cuando quiero agregar un detalle en el dbGrid no puedo pasar a la siguiente fila debido a que cuando termine de llenar la primera fila y trato de pasar a la siguiente (supuestamente hay se hace el post del detalle) aparece un error que me dice que le falta un campo para el detalle (el Id de la cabecera debido a que todavía no lo he grabado y se debe de grabar junto con el detalle o sea en masa)

Bueno ese es el problema que tengo si alguien tiene una solución por favor envieme la solución a los correos:

[email protected]
[email protected]

De ante mano gracias.

Valentín Guardamino Romero
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Ayuda con cabecera-detalle o master-detail

Publicado por mamcx (13 intervenciones) el 24/12/2001 17:19:19
La solución mas simple es usar CacheUpdates (actualizaciones en cache) esto quiere decir que los registros se guardan en memoria, y puedes seguir agregando registros aun sin ID.

Otra opcion en codificar el evento OnNewRecord del detalle y asignar el id de la tabla padre. Sin embargo, me supongo que debes poder cancelar, asi que junto con esto activa cache updates (busca en la ayuda por detalles..no es dificil)

P.D. Si usas ado, entonces utiliza batch Optimistic
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ayuda con cabecera-detalle o master-detail

Publicado por Valentin Guardamino Romero (4 intervenciones) el 26/12/2001 10:51:28
Gracias por la ayuda, me salio con batch Optimistic pero el detalle fue que en el DBGrid cada vez que paso de fila a fila, se hace el post pero no en la base de datos (access xp) supongo que lo hace en memoria.
Como el detalle ya estaba lleno en memoria con los datos cada vez que hacia post a la cabecera, supuestamente también debería de grabarse el detalle pero no lo hacía, se grababa la cabecera mas no el detalle (se perdía). Entonces lo que hice fue en el evento BeforePost de la cabecera crear objetos con todos los campos del detalle y pasarlos a una lista (Tlist) y después en el evento AfterPost lo que hice fue añadirlos vía SQL (INSERT) al detalle.

Trabajo con ADO, access xp y Delphi 5.0

Si existe otra forma de hacerlo por favor hazmela saber, de todas formas me haz ayudado mucho; gracias.

Valentín

Nota: Feliz Navidad
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ayuda con cabecera-detalle o master-detail

Publicado por mamcx (13 intervenciones) el 26/12/2001 14:25:15
Que vuelta!

Como supones, los registros se guardan en la memoria. Pero es innecesario todo ese trabajo...

Básicamente lo que debes hacer es:

1- Despues de editar la cabecera y el detalle (si te desconectaste de la base de datos) es conectarte de nuevo..

2- Iniciar una transaccion (MyConexion.BeginTrans)

3- Dar ApplyUpdates a la cabecera, luego al detalle

4- Si hubo error, cancelar la transacción (RollbackTrans) de lo contrario concluirla (CommitTrans)

Si no sabes que rayos es una trasacción, es algo asi como un "paquete" de acciones que se almacenan en un registro detransacciones, y si hubo error, se cancela todo o de lo contrario se guarda todo.

Siempre deben usarse transacciones para guardar más de 1 registro (NOTA: SIEMPRE)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ayuda con cabecera-detalle o master-detail

Publicado por Valentin Guardamino Romero (4 intervenciones) el 27/12/2001 00:54:37
Claro que entiendo lo que me quieres decir, tengo en un DataModule mi AdoConnection (solito) y tengo otro DataModule donde tengo solo unos DataSource y AdoQuery (este DataModule tiene un Uses al primer DataModule para que los Querys tengan la conexion a la Base de Datos) solo esos componentes nada más.
Ahora tengo que hacer AdoConnection.BeginTrans después AdoConnection.CommitTrans y finalmente AdoConnection.RollbackTrans a la transacción que voy a realizar osea el ApplyUpdates. Lo que sucede es que he estado buscando en las propiedades y metodos de los componentes que estoy usando y ninguno de ellos posee el ApplyUpdates.
Por si acaso estoy trabajando en dos capas y no en tres.
He utilizado ApplyUpdates pero con el componente ClientDataSet, pero en tres capas para un un curso de la universidad, pero nada que ver en dos capas.
Que componentes crees que deba de usar, este proyecto que estoy realizando es pequeño y podría cambiarle algunas cosas como usar algún componente adicional o quitarle y usar otro.
De ante mano gracias, por tu atención.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ayuda con cabecera-detalle o master-detail

Publicado por mamcx (6 intervenciones) el 27/12/2001 14:44:13
Eso si es información...

Ahora que estoy seguro que usas ADo, utiliza UpdateBatch en reemplazo de ApplyUpdates (CancelBatch para cancelar). El resto es igual...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ayuda con cabecera-detalle o master-detail

Publicado por Valentin Guardamino Romero (2 intervenciones) el 29/12/2001 05:20:17
Gracias, con lo que me dices entonces debo de usar un AdoDataSet ya que es el componente que tiene el UpdateBatch y CancelBatch.
Voy a investigar este componente.
Gracias.
Feliz año y que no te falte trabajo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar