使用Delphi中的ClientDataSet,您是否能够同时显示数据和;DBGrid中的增量记录?
我正在使用标准的数据感知组件和dbExpress在Delphi6+MySQL数据库中制作一个应用程序。该应用程序允许用户在网格中查看记录,并在客户端编辑数据(插入和/或删除记录)。然后,这些数据编辑仅在单击“提交”按钮时写入数据库。所有这些都可以正常工作,并具有以下设置: 控件: 1.DBGrid1链接到数据源1以直观地显示数据。 2.DataSource1链接到ClientDataSet1,以提供DBGrid要显示的数据。 3.ClientDataSet1链接到DataSetProvider1,以提供客户端数据进行编辑。 4.DataSetProvider1链接到SQLDataSet1,它从单个DB表中选择记录。 5.SQLDataSet1链接到SQLConnection以提供到MySQL数据库的连接 行动: 1.用户插入一条记录:我使用ClientDataSet1.InsertRecord; 2.用户删除记录:我使用ClientDataSet.Delete; 3.用户提交数据:我使用ClientDataSet1.ApplyUpdate(-1) 这一切在处理数据和发布数据方面都非常有效(包括DataSetProvider1BeforeUpdateRecord删除记录之前的一些小技巧) 现在我的问题: 当用户第一次加载表单时,DBGrid1将显示所有原始记录,并删除所有已删除的记录。但当用户在ClientDataSet1中插入新记录时,DBGrid1中会显示一条空白记录。实际数据不会丢失或设置为空,因为在ClientDataSet1.ApplyUpdate中,此记录会正确写入数据库 我知道TClientDataSet具有原始数据的数据属性和编辑数据的增量属性。这两个属性是否可以同时在单个DBGrid中显示数据,并且仍然允许用户编辑数据使用Delphi中的ClientDataSet,您是否能够同时显示数据和;DBGrid中的增量记录?,delphi,dataset,dataprovider,dbgrid,Delphi,Dataset,Dataprovider,Dbgrid,我正在使用标准的数据感知组件和dbExpress在Delphi6+MySQL数据库中制作一个应用程序。该应用程序允许用户在网格中查看记录,并在客户端编辑数据(插入和/或删除记录)。然后,这些数据编辑仅在单击“提交”按钮时写入数据库。所有这些都可以正常工作,并具有以下设置: 控件: 1.DBGrid1链接到数据源1以直观地显示数据。 2.DataSource1链接到ClientDataSet1,以提供DBGrid要显示的数据。 3.ClientDataSet1链接到DataSetProvider1
我已经看过30多个资源和演示应用&所有这些都避免了这个问题。这可以做到吗?好的……这个问题被认为是一个相当多的问题,没有太多的反馈。我下载了许多教程、演示应用程序并阅读了多篇讨论这些控件使用的文章/帮助信息,进行了一些研究 最终结果是:
如果您创建了一个演示应用程序,但无法使其正常工作,请投票表决我的答案。谢谢Delphi提供的TDBGrid控件没有显示字段新旧值的内置功能。当然,欢迎您从网格继承,或者创建自己的网格并添加功能,或者购买第三方组件来实现您想要的功能。您不局限于标准控件,尽管它们提供了最常用的功能 您还可以通过使用计算字段来完成所需的操作。例如,如果您有一个字符串字段
Name
,请向名为OldName
的数据集中添加一个新的计算字符串字段,其长度与Name相同
然后在数据集的OnCalcFields事件中,只需输入如下代码:
if DataSet.State = dsEdit then
begin
DataSet.FieldByName('OldName').Value := DataSet.FieldByName('Name').OldValue;
end
else
begin
DataSet.FieldByName('OldName').Value := Null;
end;
TClientDataset将自行处理正确的记录状态。将记录更改,但除非您明确要求它显示某些其他状态(请参见StatusFilter属性),否则它将显示记录的实际状态
InsertRecord可能会绕过某些通知机制,因此不会更新字段显示。如果执行简单的插入操作并设置字段值,该怎么办?为什么插入新记录时出现空白记录的问题?这不是你填写的空白记录吗?不。我运行ClientDataSet1.InsertRecord([字段值数组]);InsertRecord先执行Insert,然后执行Post事件。完成此操作后,DBGrid将显示一条不可编辑的空白记录。我执行ApplyUpdate以提交给DB,然后查询DB表,新插入的记录就在那里。问题是DBGrid没有在新插入的记录中显示字段值。请检查我的答案。@Idsandon:是的,它是旧的。所有开发人员都需要使用可用的或提供给项目的工具(有时是旧的,有时是最先进的)。解决方案不仅仅是更新(这意味着钱,而且往往会带来其他问题)。因此,版本的年代对我的项目获得解决方案并不重要,但会帮助其他人理解问题的背景。谢谢您的输入是的,但是在这样的版本上也很难提供帮助,因为大多数人都转移到了以后的版本。您是否也应用了所有可用的更新包?Delphi6发布时有点问题,我听说了。但D6就是这样,并且已经有了更新。这些控件只是有缺陷的,或者更确切地说是一项正在进行的工作。即使升级到D7或更高版本,也意味着应用程序上的许多变化肯定会很快被“放下”。希望如此。如果没有测试,我不确定这是否有效。我的直觉是不会,因为我使用的是TClientDataSet,它有两种存储数据的“模式”:实际记录状态(数据库中存在的数据)和日志状态(clientdataset中更改的数据)。这些不能显示在侧面