Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 05-04-2007
joal joal is offline
Miembro
 
Registrado: jun 2006
Posts: 10
Poder: 0
joal Va por buen camino
Question Los cambios hechos por una 2da forma no se actualizan inmediatamente

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
Responder Con Cita
  #2  
Antiguo 06-04-2007
joal joal is offline
Miembro
 
Registrado: jun 2006
Posts: 10
Poder: 0
joal Va por buen camino
Talking Ok. Ya me respondi yo solo.

Después de haber leído algunos posteos como los de hacer Refresh sobre el datasource, el que a veces no funciona como comenta vtdeleon y algunos otros comentarios, empece a usar el método heurístico (lease pruebayerror + aversipega) a fin de tratar de resolver esto.

La solución la encontré validando si había una transacción activa en la forma padre y de ser afirmativo, decir que la terminara. El código quedó como sigue.

Código Delphi [-]
procedure Tfrm_HistoriaClinica.PopulaHeredofamiliares;
begin
  lb_Heredofamiliares.Items.Clear;
  // esto no deberia ir en la forma invocada?
  if dm_Heredofamiliares.ibt_IBTransaction.Active then
    dm_Heredofamiliares.ibt_IBTransaction.Commit;
  with dm_Heredofamiliares.ibq_IBQuery do
    begin
    Close;
    ... etc.

lo que me pareció extraño es que tengo que hacer referencia a la transacción de la forma padre (HistoriaClinica) en lugar de la transaccion de la forma hija (Heredofamiliar) ya que fue con los recursos de esta última con lo que realice la operación sobre la BD e hice la transacción. No se si es que al refererirse a la misma tabla, el problema con el commit sea a nivel sesión de BD y no a nivel de forma.

enfin, lo dejo por si a alguien más le es de utilidad. gracias
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
No guarda los cambios hechos lucasarts_18 MS SQL Server 1 06-10-2006 03:55:21
No se actualizan los datos al grabar marcial Conexión con bases de datos 4 25-05-2006 11:04:29
abortar inmediatamente acrophet Varios 4 20-10-2003 18:07:18
no se me actualizan los DBEDit Giniromero Conexión con bases de datos 5 09-10-2003 13:58:36


La franja horaria es GMT +2. Ahora son las 01:13:30.


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
Copyright 1996-2007 Club Delphi