Ver Mensaje Individual
  #8  
Antiguo 13-07-2012
jasmad jasmad is offline
Miembro
NULL
 
Registrado: jul 2011
Posts: 75
Reputación: 13
jasmad Va por buen camino
synchronize

creo que te entiendo,
si tengo una clase que hereda a tthread tengo que hacer el llamado de synchronize en el execute
algo asi:
Código Delphi [-]
procedure TPublisher.Execute;
begin
   try
      if(Self.tabla.State in dsEditModes)then begin
         Synchronize(@Self.tabla.Post);
      end;
   except
      on e:exception do handleException(e);
   end;
end;
y en una funcion que guarde los cambios del dataset
crear una instancia y llamarlo antes del commit
algo asi:
Código Delphi [-]
procedure TdmConexionDB.aceptarCambiosDataSet(var dataset: TIBCTable);
var
  posteador:TPublisher;
  bm:string;
begin
  activarTransaccion;
  try
  try
    bm:=dataset.Bookmark;
    //la idea es que con el synchronize se ejecute el post antes del commit porque el programa se caeria
    //pero que corra en otro hilo para que no se pegue la aplicacion
    posteador:=TPublisher.Create(dataset);//esta linea ejecuta en un hilo aparte el codigo que se encuentra en el execute de TPublisher
    transacciones.CommitRetaining;
  except
    on e: Exception do
    begin
      transacciones.RollbackRetaining;
      MessageDlg('Error '+e.ToString,'aceptarCambiosDataSet ' + dataset.Name + #13#10 + e.Message,mtError, [mbOK], 0);
    end;
  end;
  finally
     dataset.Bookmark:=bm;
  end;
end;
yo lo entendi asi pero si me equivoco en algo te agradeceria que me corrigieras

gracias

Última edición por jasmad fecha: 13-07-2012 a las 22:46:31.
Responder Con Cita