Hola, colegas, los molesto por un problema que ya me está consumiendo las pocas neuronas que aún conservo. Tengo dos tablas en Access relacionadas, una para almacenar las órdenes y otra para los detalles de las mismas. La estructura de las mismas es:
Tabla Ordenes
------------------
ID_Orden Autoumérico Clave primaria
Fecha Fecha/Hora
Tabla Detalles
-----------------
ID_Orden Numérico Clave primaria
ID_Item Numérico Calve primaria
Concepto Texto
Importe Numérico
Las tablas se relacionan por el campo ID_Orden. La relación está establecida en el Access, exigiendo integridad referencial, y actualizando y eliminando en cascada. A la vez, creé un Dataset en mi proyecto con estas dos tablas, donde también establezco la misma relación. Tengo un formulario en mi proyecto donde utilizo un TextBox para mostrar el campo ID_Orden, un DateTimePicker para el campo Fecha, y un DataGridView para los detalles. Siguiendo algunos ejemplos que pude ir encontrando, en el evento Enter del DataGridView hago un EndEdit del BindingSource de las ordenes, y al momento de grabar los datos, hago algo así:
Me.Validate()
Me.OrdersBindingSource.EndEdit()
Me.DetailsBindingSource.EndEdit()
Dim orderUpdates() As DataRow = Me.TestDataSet.Orders.Select("", "", DataViewRowState.Added Or DataViewRowState.ModifiedCurrent)
Dim detailUpdates() As DataRow = Me.TestDataSet.Details.Select("", "", DataViewRowState.Added Or DataViewRowState.ModifiedCurrent)
Me.OrdersTableAdapter.Update(orderUpdates)
Me.DetailsTableAdapter.Update(detailUpdates)
Dim orderDeletes() As DataRow = Me.TestDataSet.Orders.Select("", "", DataViewRowState.Deleted)
Dim detailDeletes() As DataRow = Me.TestDataSet.Details.Select("", "", DataViewRowState.Deleted)
Me.DetailsTableAdapter.Update(detailDeletes)
Me.OrdersTableAdapter.Update(orderDeletes)
El inconveniente es que al ejecutar la instrucción “Me.DetailsTableAdapter.Update(detailUpdates)” obtengo un error que indica “No se puede agregar o cambiar el registro porque se necesita un registro relacionado en la tabla Ordenes”. Según entiendo, el error se produce porque el Access asigna en la instrucción anterior (“Me.OrdersTableAdapter.Update(orderUpdates)”) un identificador para el campo ID_Orden, pero el mismo no se traslada al campo relacionado de la grilla, por lo que se pierde la integridad referencial. El problema es que no sé cómo solucionarlo, ya probé varias combinaciones (no establecer la relación en el Access, cambiarla para que no exija integridad referencial, indicar en el Dataset que comience el incrementador del campo ID_Orden en -1 y que el paso sea -1 (también lo leí en algunos ejemplos), pero nada funcionó. Traté de encontrar algún ejemplo que hiciera lo mismo, pero no lo conseguí. ¿Alguno tendrá algún ejemplo que me permita descubrir dónde estoy fallando?
Saludos, y muchas gracias a todos,
Andrés