Holas al foro.
Requeria hacer un refresh a un solo registro, "estoy utilizando componentes dbexpress" para un aplicativo datasnap. En el componente ClientDataSet existe un metodo RefreshRecord, este metodo no lee nuevamente el registro en la base de datos....
Aqui la explicación de Al González:
Cita:
Ahora, cuando haces un ClientDataSet.RefreshRecord, sólo estás diciéndole que le pida al proveedor la última copia que fue leída del registro actual, la cual se encuentra todavía en algún lugar de la memoria, pero NO se realiza una nueva consulta Select.
Ante esto, hace ya tiempo que implementé mi propio "RefreshRecord re-consultor". La esencia del mismo es:
1. Eliminar de memoria la fila actual del conjunto de datos cliente.
2. Ignorar por completo ese registro llamando a MergeChangeLog.
3. Consultar con otro conjunto de datos cliente el registro que se quiere volver a leer, mediante un proveedor conectado a una consulta SQL que tenga como parámetro de entrada el "ID" del registro a consultar.
4. Copiar de este segundo conjunto de datos el registro recién leído al primer conjunto de datos. Esto último lo consigues con una sentencia como:
CDS1.AppendData (CDS2.Data, True);
Parece mucho trabajo, pero, como ya has visto, la poco deseable alternativa es llamar al método Refresh, el cual haría una nueva y costosa consulta de todas las filas, cuando realmente sólo necesitas releer una de ellas.
|
Al González, gracias por tu respuesta, hice lo que indicaste...
Para probar lo hice en un boton - no esta encapsulado ó en algun objeto que seria lo ideal, "lo voy hacer"
Código Delphi
[-]procedure TForm1.Button12Click(Sender: TObject);
Var
xClave:Integer;
begin
if ClientDataset3.ChangeCount>0 then
showmessage('Hay datos pendientes en caché, aplicarlos antes del refresh')
else begin
xClave:=ClientDataset3fcod_mast.AsInteger;
CDS_refresh.Close;
CDS_refresh.Params.ParamByName('xClave').AsInteger:=xClave;
CDS_refresh.Open;
ClientDataset3.Delete;
ClientDataset3.MergeChangeLog;
ClientDataset3.AppendData (CDS_refresh.Data, True);
end;
end;
Saludos
Your friend
StartKill
Lima-Perú