Tengo una relación maestro detalle entre la tabla clientes y la tabla lista de precio. Para ello utilizo los siguientes componentes:
- dtsCliente (TAdoDataSet) --> Tiene asignada la consulta que me trae los registros de la tabla clientes
- dtsListaPrecioCliente (TAdoDataSet) --> Tiene creado un parámetro (id_cliente). Trae los registros de la tabla lista_precio_clientes que cumplen con la igualdad de id_cliente
- dtpCliente (TDataSetProvider) --> Asociado al componente dtsCliente
- cdsCliente (TClientDataSet) --> Asociado al componente anterior.
- cdsListaPrecioCliente (TClientDataSet) --> Asociado al componente cdsCliente mediante dataSetField=cdsClientedstListaPrecioCliente
- dsCliente (TDataSource) --> Asociado a dtsCliente.
El primer problema que se me presenta es que al hacer un insert sobre cdsCliente no me autoincrementa el valor de la clave (id_cliente). Para este caso probé poner la propiedad AutoGenerateValue del campo correspondiente en TRUE pero no funciona. También he probado en asignar yo el valor desde una grilla y en dicho caso anda bien (al hacer un insert en el detalle, asigna el valor ingresado a id_cliente en la tabla detalle).
Todo funciona bien hasta que hago el applyUpdate. En este caso sale un error de que no se permite el valor NULL para id_cliente (en caso de que no le asigne manualmente dicho código) o el error de que el valor de id_cliente para la tabla lista_precio_cliente no existe en la tabla Clientes (en caso de asignar manualmente el id desde la grilla).
Otra cosa que he probado es poner pfInKey = True en la propiedad ProviderFlags de los campos que son claves.
No sé por donde probar ya que soy nuevo en esto de trabajar en capas y estoy haciendo mi primera aplicación de prueba!
Gracias por la ayuda!