我開發通過TSimpleDataSet
(dbExpress組件)顯示在DBGrid
信息自動刷新數據集組件/ DBGrid的
有問題的軟件是在2級不同的計算機由兩個不同的人使用的軟件。
他們都在不同的時間查看和編輯相同的信息。 我試圖找出一種方法來自動更新DBGrid
(或更確切地說,DataSet
,對嗎?)一旦計算機A對行進行更改(編輯某物/其他),反之亦然。
目前我已經成立了一個名爲Refresh
TButton
,一旦點擊執行以下代碼:
procedure TForm2.actRefreshDataExecute(Sender: TObject);
begin
dbmodule.somenameDataSet.MergeChangeLog;
dbmodule.somenameDataSet.ApplyUpdates(-1);
dbmodule.somenameDataSet.Refresh;
dbmodule.somename1DataSet.MergeChangeLog;
dbmodule.somename1DataSet.ApplyUpdates(-1);
dbmodule.somename1DataSet.Refresh;
dbmodule.somename2DataSet.MergeChangeLog;
dbmodule.somename2DataSet.ApplyUpdates(-1);
dbmodule.somename2DataSet.Refresh;
dbmodule.somename3DataSet.MergeChangeLog;
dbmodule.somename3DataSet.ApplyUpdates(-1);
dbmodule.somename3DataSet.Refresh;
end;
這是罰款和按預期工作,一次點擊。 我想爲此自動更新功能,例如,當計算機A在一行中編輯信息時,計算機B的DBGrid
應該相應地更新它的顯示,而無需單擊刷新按鈕。
我想我會使用TTimer
並在特定的時間間隔在兩臺PC上的兩個軟件上進行設置。
我實際的問題是:
難道還有比一個TTimer
這更好的辦法?如果是這樣,請詳細說明。 此外,如果TTimer
路線是去任何進一步的信息,你可能會發現國家有用的方式,將不勝感激(親的和反對的等)
我使用的RAD Studio 10西雅圖和dbExpress
組件,數據集連接到我的網站的託管MySQL數據庫。
謝謝!
當然,更好的方法是由數據庫服務器通知。爲此,數據庫服務器(如果有的話)需要提供這樣的功能,並且訪問驅動程序也需要支持它。 DBX可能不會,但應該可以使用輔助連接。像IBEventAlerter例如interbase/firebird一樣。 –
爲什麼這是一個更好的方式,而不是定時器?只是出於好奇。另外,我正在使用MySQL,並且是將數據集連接到數據庫。 – Petzy
您的程序不需要頻繁敲擊服務器。可能99%的刷新是空手迴歸。如果您延長時間間隔以避免這種情況發生,那麼您將承擔不通知變更的風險。 –