Por favor,ayuda maestro-detalle

11/04/2005 - 11:15 por Alejandro | Informe spam
Hola a todos, tengo dos tablas relacionadas (maestro-
detalle). A la tabla de cabecera le asigno localmente en
mi aplicación un código temporal, que es el código que le
paso a la tabla detalle a la hora de insertar líneas de
detalle. El problema está en que a la hora de insertar la
fila de cabecera, ejecuto un trigger que cambia ese
código temporal por el código real (extraído de una tabla
con numeradores) y no sé como sustituir el valor de las
líneas de detalle a la hora de insertarlas en la base de
datos con el código real que he usado en la tabla
cabecera.

Gracias!

Preguntas similare

Leer las respuestas

#1 Alejandro Mesa
11/04/2005 - 14:08 | Informe spam
Alejandro,

No creo que eso sea de mucha ayuda (el usar valores temporales para la clave
primaria de la tabla cabecera), de todas maneras (si estas usando DRI) debes
insertar primero en la tabla cabecera y despues en la de detalle, asi que
cuando se ejecuta el trigger todavia no existen filas asociadas en la tabla
detalle.

Un patron que se usa bastante para estos casos es que desde la aplicacion
cliente se inicie un atransaccion, se inserte la fila en la tabla de
cabecera, se seleccione el valor de la clave primaria que se asigno y se le
pase al procedimiento que inserta en la tabla detalle, si todo sale bien se
hace un commit de la trasaccion de lo contrario se hace un rollback. Otra
posibilidad es que mandes como parametro un documento XML con la fila de
cabecera y sus filas de detalle, de esta forma puedes iniciar la transaccion
en el server y no en la aplicacion cliente.


AMB

"Alejandro" wrote:

Hola a todos, tengo dos tablas relacionadas (maestro-
detalle). A la tabla de cabecera le asigno localmente en
mi aplicación un código temporal, que es el código que le
paso a la tabla detalle a la hora de insertar líneas de
detalle. El problema está en que a la hora de insertar la
fila de cabecera, ejecuto un trigger que cambia ese
código temporal por el código real (extraído de una tabla
con numeradores) y no sé como sustituir el valor de las
líneas de detalle a la hora de insertarlas en la base de
datos con el código real que he usado en la tabla
cabecera.

Gracias!

Respuesta Responder a este mensaje
#2 Alejandro
11/04/2005 - 14:26 | Informe spam
Hola, y antes que nada, gracias por contestarme.
Utilizo una variable temporal, que es la que heredan la
lineas de detalle. Siguiendo un ejemplo sobre
autonumericos que viene en la web de microsoft
(http://msdn.microsoft.com/library/spa/default.asp?
url=/library/SPA/cpguide/html/cpconretrievingidentityoraut
onumbervalues.asp), he sustituido el texto de
insertcommand del sqldataadapter de la cabecera por un
procedimiento almacenado de forma parecida al que viene
en su ejemplo. He resuelto mi problema.
Lo malo ahora es que sigue sin actualizarme el dataset
localmente (tengo que asignarle manualmente el campo
autumerico con el valor de retorno del parametro que
recibo del procedimiento almacenado). He probado a variar
la propiedad UpdatedRowSorce, pero no me funciona.

Saludos!!

Alejandro,

No creo que eso sea de mucha ayuda (el usar valores


temporales para la clave
primaria de la tabla cabecera), de todas maneras (si


estas usando DRI) debes
insertar primero en la tabla cabecera y despues en la de


detalle, asi que
cuando se ejecuta el trigger todavia no existen filas


asociadas en la tabla
detalle.

Un patron que se usa bastante para estos casos es que


desde la aplicacion
cliente se inicie un atransaccion, se inserte la fila en


la tabla de
cabecera, se seleccione el valor de la clave primaria


que se asigno y se le
pase al procedimiento que inserta en la tabla detalle,


si todo sale bien se
hace un commit de la trasaccion de lo contrario se hace


un rollback. Otra
posibilidad es que mandes como parametro un documento


XML con la fila de
cabecera y sus filas de detalle, de esta forma puedes


iniciar la transaccion
en el server y no en la aplicacion cliente.


AMB

"Alejandro" wrote:

Hola a todos, tengo dos tablas relacionadas (maestro-
detalle). A la tabla de cabecera le asigno localmente




en
mi aplicación un código temporal, que es el código




que le
paso a la tabla detalle a la hora de insertar là­neas




de
detalle. El problema està¡ en que a la hora de




insertar la
fila de cabecera, ejecuto un trigger que cambia ese
código temporal por el código real (extraà­do de una




tabla
con numeradores) y no sé como sustituir el valor de




las
là­neas de detalle a la hora de insertarlas en la base




de
datos con el código real que he usado en la tabla
cabecera.

Gracias!



.

email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida