Una nueva duda. Igualmente estoy usando Firebird y componentes Interbase (ibTransaction, ibQuery, ibDatabase).
Tengo una forma (frm_HistoriaClinica) que muestra los datos relacionados a un paciente, como son sus relaciones heredofamiliares. Si el usuario quiere dar de alta una nueva relación heredofamiliar, se llama a una nueva forma para tal propósito (frm_Hdofamiliares), se indican los campos ID, el usuario ingresa los datos respectivos, se actualiza la BD y regresa a la forma anterior.
Coloqué separadamente el proceso de popular la lista de heredofamiliares (TListBox) ya que así la puedo llamar tanto al abrir la forma principal, como cuando se hace alguna operación sobre dicha tabla.
Código Delphi
[-]
procedure Tfrm_HistoriaClinica.btn_NuevoHdofamiliarClick(Sender: TObject);
begin
frm_Hdofamiliares:= Tfrm_Hdofamiliares.Create(Self);
frm_Hdofamiliares.str_pacienteID:= str_pacienteID;
frm_Hdofamiliares.str_hdofamiliarID:= str_heredofamiliarID;
try frm_Hdofamiliares.ShowModal;
finally frm_Hdofamiliares.Free; end;
PopulaHeredofamiliares;
end;
procedure Tfrm_HistoriaClinica.PopulaHeredofamiliares;
begin
lb_Heredofamiliares.Items.Clear;
with dm_Heredofamiliares.ibq_IBQuery do
begin
Close;
SQL.Clear;
SQL.Append('SELECT hdofamiliar_ID, heredorelacion_nombre FROM heredorelaciones, hdofamiliares ' +
' WHERE (heredorelaciones.heredorelacion_ID = hdofamiliares.heredorelacion_ID) ' +
' AND (hdofamiliares.paciente_ID = ' + QuotedStr(str_pacienteID) + ')' );
Open;
while not Eof do
begin
lb_Heredofamiliares.Items.Add(FieldByName('heredorelacion_nombre').AsString);
Next;
end;
end;
end;
Ok. El problema surge al momento de actualizar los datos en la forma de Heredofamiliares (frm_Hdofamiliares) y regresar a la forma principal (frm_HistoriaClinica); aún cuando se supone que al regresar, la nueva relación ya está dada de alta en la BD y se vuelve a leer esta, la nueva relación no aparece. Es necesario cerrar la forma de Historia Clinica y volverla a abrir para poder ver la nueva relacion heredofamiliar que se dio de alta.
Si se supone que estoy liberando la instancia de la forma secundaria (frm_Hdofamiliares) se supone que lo hace y acaba las transacciones que hayan quedado; y si posterioremente abro y cierro la BD para volver a leer las relaciones heredofamiliares, se supone que va a leer la recién ingresada, no?
Que estoy haciendo mal? O no debo hacerlo a nivel query y tengo que hacerlo por otro método?
Gracias de antemano por la ayuda