Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   no corresponding master record found (https://www.clubdelphi.com/foros/showthread.php?t=78011)

Jere_84 12-03-2012 21:44:41

no corresponding master record found
 
Hola, El panorama es el siguiente: Estoy utilizando Delphi 2010 Datasnap y hago una aplicacion simple que tiene tres ABM uno de Articulos y otro de Proveedores y el tercero es una carga de factura donde se selecciona el proveedor y se cargan artículos esta opción esta relacionada por dos ClienteDataSet relacionados de forma Maestro-Datalle.

Utilizo los componentes SQLConnection, DSProviderConnection, ClientDataSet, DataSource.

No hay problema alguno los datos se están grabando bien en la base de datos SQL Server 2008 Express, las tablas constan de los siguientes campos
Tabla Maestro
IdFactura
IdCliente
Fecha
Total

Tabla Detalle
IdFactura
Fecha
IdArticulo
Cantidad
SubTotal

Le programe para que haga un control, cuando se entra desde dos maquinas distintas al mismo tiempo y los dos tienen el mismo numero de factura el segundo que graba lo hace con el numero siguiente si por ejemplo los dos usuarios entran con el numero 178 el primero graba 178 y el segundo 179. Por lo tanto en el botón grabar programe lo siguiente:
Código Delphi [-]
  ClientDataSetDetalle.First;
 while not ClientDataSetDetalle.Eof do
 begin
   ClientDataSetDetalle.Edit;
   ClientDataSetDetalle.FieldByName('IdFactura').Value:= NumeroFacturaValido;
   ClientDataSetDetalle.Post;
   Next;
 end;
En la variable "NumeroFacturaValido" estoy pasando el siguiente numero al usuario que graba con el numero repetido, pero al pasar por la linea del post salta el error:
"no corresponding master record found"
¿Alguna sugerencia?

Desde ya muchas gracias por leerme y disculpas a los moderadores si el post no corresponde a esta opción. :D

ecfisa 12-03-2012 21:56:33

Hola Jere_84

Revisá si te sirve este enlace

Saludos.

Jere_84 13-03-2012 13:19:40

Gracias ecfisa, descubrí una solución para aquellos que no lo sepan del lado servidor en el DataSetProvider que corresponde a la relación maestro detalle tildando la propiedad poCascadeUpdates = True
De esta manera solo modificando el IdFactura en la cabezera tambien se modifica en la tabla detalle no hace falta esto:
Código Delphi [-]
 ClientDataSetDetalle.First;
 while not ClientDataSetDetalle.Eof do
 begin
   ClientDataSetDetalle.Edit;
   ClientDataSetDetalle.FieldByName('IdFactura').Value:= NumeroFacturaValido;
   ClientDataSetDetalle.Post;
   Next;
 end;
Solo con esto basta:
Código Delphi [-]
  ClientDataSetCabezera.Edit;
  ClientDataSetCabezera.FieldByName('IdFactura').Value:= NumeroComprValido;

Gracias de todas formas. :)

ecfisa 13-03-2012 13:51:54

Hola Jere_84.

Me alegra que lo hayas resuelto y gracias por compartir con nosotros tu solución. :)

Aprovecho para pedirte que cuando incluyas código en tu mensaje utilices los TAG's o etiquetas (ya edité tu mensaje agregándolos). Esta imágen explica el uso:



Saludos.

Jere_84 13-03-2012 14:15:26

Ok, lo voy a hacer para la proxima! :D

Saludos!


La franja horaria es GMT +2. Ahora son las 19:26:26.

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