我已经使用计算字段定义了Delphi TTable对象,并在表单的网格中使用它。我想制作一个TTable对象的副本,包括计算字段,打开该副本,使用副本对数据进行一些更改,关闭副本,然后刷新原始副本,从而刷新网格视图。是否有一种简单的方法可以获得以这种方式使用的TTable对象的副本?
理想的答案是尽可能地解决问题,即获得这样的方法:
newTable:=getACopyOf(existingTable);
答案 0 :(得分:2)
您可以使用 TBatchMove 组件复制表格及其结构。
设置Mode属性以指定所需的操作。 “源”和“目标”属性指示添加,删除或复制其记录的数据集。在线帮助有其他详细信息。
(虽然我认为你应该研究一种TClientDataSet方法 - 它当然更具可扩展性和速度。)
答案 1 :(得分:1)
让我提出几点:
让我们假设您想以编程方式进行更改。然后,您可以使用TTable的DisableControls和EnableControls方法在此期间禁止屏幕更新。
如果您想要两个具有相同数据的屏幕(例如,在线更改期间比较数据),您实际上可以创建两次相同的屏幕,其中TTable对象位于屏幕上。它将具有完全相同的配置(但不会在第一个屏幕上继承先前进行的更改,但从数据库中读取数据)。在一个屏幕上进行的更改不会在另一个屏幕上自动刷新。
另一种方法:尝试使用带有TTable的TDataSetProvider作为数据集(源)提供TClientDataSet。 ApplyUpdates会将更改反馈给TTable。由于计算字段是只读的,因此不会受到影响。 (未经测试,但应该有效)
答案 2 :(得分:0)
您应该能够在表单上选择表格,使用Ctrl-C复制它,然后将其粘贴到任何文本编辑器中。您将获得对象属性的文本版本,然后您可以根据需要进行编辑。完成后,再次选择所有文本,然后将其复制到剪贴板并将其粘贴回表单。
答案 3 :(得分:0)
我认为第二种方法(TClientDataset)可能是在这种情况下使用的最佳方法。另一种方法是使用内存表(例如kbmMemTable)。无论哪种方式,您都将克隆原始表,然后在通过数据集的内存版本进行更改后更新原始表。