Hola Vales08.
No, no estas entendiendo mál, tu interpretación es correcta, eso funcionaría para una modificación del médico y no para un ingreso. Lo hice así para simplificar el ejemplo.
En tu caso deberías cambiar la línea:
Código Delphi
[-]
GridDetalle.DataSource.DataSet.FieldByName('ReferMedico').AsInteger:=
GridMedicos.DataSource.DataSet.FieldByName('Medico_id').AsInteger;
Por:
Código Delphi
[-]
GridDetalle.DataSource.DataSet.FieldByName('ReferMedico').AsInteger:= DataSet.FieldByName('Medico_id').AsInteger;
Pero no es tán simple, te encontrás con el problema de tener que asignar un identificador que todavía no tenés ya que el médico todavía no se ha guardado. Es decir que vas a tener que hacer un Post en la tabla Médicos sin tener seguramente, todos sus campos ingresados. Una forma de solucionarlo es usando CachedUpdates.
Si mál no recuerdo trabajas con componentes IBX, estos tienen una pequeña complicación a la hora de usar CachedUpdates y tablas en relacion master/detail: Tenes que desactivar el DataSource del detail antes de guardar y volverlo a conectar luego de haber guardado.
Es decir que quedaría:
Código Delphi
[-]
....
begin
DModule.tbDetCober.CachedUpdates:= True;
DModule.tbMedicos.CachedUpdates:= True;
DModule.tbDetCober.Open;
DModule.tbMedicos.Open;
end;
...
DModule.tbMedicos.Post;
...
procedure TForm1.Button1Click(Sender: TObject);
var
i: Integer;
begin
for i:= 0 to GridCoberturas.SelectedRows.Count -1 do
begin
GridCoberturas.DataSource.DataSet.GotoBookmark(Pointer(GridCoberturas.SelectedRows.Items[i]));
with DModule do
begin
tbDetCober.DataSource:= nil;
tbDetCober.Append;
tbDetCober.FieldByName('REFMEDICO').AsInteger:= tbMedicos.FieldByName('MEDICO_ID').AsInteger;
tbDetCober.FieldByName('COBERTURA').AsString:= tbCoberturas.FieldByName('COBERTURA').AsString;
tbDetCober.Post;
IBdatabase1.ApplyUpdates([tbDetCober]);
tbDetCober.DataSource:= DModule.dsMedicos;
end;
end;
end;
Si hay algo en lo que no me expliqué bién, decimelo y te adjunto un código de ejemplo.
Saludos.