我已經定義了一個帶有計算字段的Delphi TTable對象,並且它在表單的網格中使用。我想複製TTable對象,包括計算的字段,打開該副本,使用副本對數據進行一些更改,關閉副本,然後刷新原始副本,從而更新網格視圖。有沒有一種簡單的方法來獲得一個TTable對象的副本以這種方式使用?如何複製包含其計算字段的Delphi TTable?
理想的答案將是一個解決問題,一般地,即越來越像這樣的一種方式:
newTable:=getACopyOf(existingTable);
我已經定義了一個帶有計算字段的Delphi TTable對象,並且它在表單的網格中使用。我想複製TTable對象,包括計算的字段,打開該副本,使用副本對數據進行一些更改,關閉副本,然後刷新原始副本,從而更新網格視圖。有沒有一種簡單的方法來獲得一個TTable對象的副本以這種方式使用?如何複製包含其計算字段的Delphi TTable?
理想的答案將是一個解決問題,一般地,即越來越像這樣的一種方式:
newTable:=getACopyOf(existingTable);
您應該能夠選擇的形式在桌子上,將它複製使用Ctrl-C,然後將其粘貼到任何文本編輯器中。您將獲得對象屬性的文本版本,然後您可以根據需要進行編輯。完成後,再次選擇所有文本,然後將其複製到剪貼板並粘貼到表單上。
讓我提出幾件事情:
讓我們假設您想以編程方式進行更改。然後,您可以使用TTable的DisableControls和EnableControls方法在此期間禁止屏幕更新。
如果你想有兩個屏幕具有相同的數據指標(如比較時在線修改數據),你實際上可以創建在同一屏幕的兩倍,到Ttable對象是屏幕本身上。它將具有完全相同的配置(但不會在第一個屏幕上執行以前進行的更改,而是從數據庫中讀取數據)。在一個屏幕上進行的更改不會自動刷新。
的另一種方法:嘗試使用的TDataSetProvider與TTable的作爲數據集(源)供給的TClientdataSet。 ApplyUpdates會將更改反饋給TTable。由於計算的字段是隻讀的,它們不受影響。 (未經測試,但應工作)
我認爲,第二種方法(的TClientdataSet)可能是在這種情況下使用的最佳方法。另一種方法是使用內存表(例如kbmMemTable)。無論採用哪種方式,您都可以克隆原始表格,然後在進行更改後循環訪問數據集的內存版本並更新原始表格。
可以使用TBatchMove組件複製一個表及其結構。
設置Mode屬性以指定所需的操作。 「源」和「目標」屬性指示添加,刪除或複製記錄的數據集。在線幫助有其他詳細信息。
(雖然我認爲你應該研究一個TClientDataSet方法 - 它當然更具可擴展性和更快速度)。