2010-02-22 26 views

Odpowiedz

14

Czy próbowałeś użyć Disable & EnableControls?

DataSet.DisableControls; 
try 
    DataSet.Close; 
    DataSet.Open; 
finally 
    DataSet.EnableControls; 
end; 

Ponadto powinno być możliwe po prostu wywołanie DataSet.Refresh zamiast zamykania i otwierania w celu uzyskania tego samego wyniku.

+0

Dobra rada! Zapomniałem o tym. –

0

Używam tego w moim app

DataSet.MergeChangeLog; 
DataSet.ApplyUpdates(-1); 
DataSet.Refresh; 

Powyższy kod jest w action nazwie actRefreshData w ActionManager

Kiedy trzeba użyć po prostu nazwać jak

actRefreshData.Execute; 

Mam nadzieję, że to pomoże.

Podpowiedź: możesz dodać Timer i zautomatyzować ten

0

Spójrz tutaj:

type THackDataSet=class(TDataSet); // a nice "hack" so we can access 
//protected members 
THackDBGrid=class(TDBGrid); 

procedure {tdmdb.}refreshgrid(grid : tdbgrid); 

var row, recno : integer; 
    ds : tdataset; 
    b : tbookmark; 
begin 
    Row := THackDBGrid(grid).Row;// or THackDataSet(ds).ActiveRecord 

    ds := grid.datasource.dataset; 

    RecNo := ds.RecNo; 

    b := ds.GetBookmark; 

    try 
    ds.close; 
    ds.Open; 
    finally 
    if (b<>nil) and ds.BookMarkValid(b) then 
    try 
    //  ds.GotoBookMark(b); 
     ds.CheckBrowseMode; 
     THackDataSet(ds).DoBeforeScroll; 
     THackDataSet(ds).InternalGotoBookmark(b); 
     if THackDataSet(ds).ActiveRecord <> Row - 1 then 
     THackDataSet(ds).MoveBy(Row - THackDataSet(ds).ActiveRecord - 1); 
     ds.Resync([rmExact{, rmCenter}]); 
     THackDataSet(ds).DoAfterScroll; 
    finally 
     ds.FreeBookMark(b); 
    end 
    else if (recno<ds.RecordCount) and (recno<>ds.RecNo) then 
    begin 
     ds.First; 
     ds.MoveBy(Max(0, recno-1)); 
    end; 
    end; 
end; 
Powiązane problemy