gpt4 book ai didi

delphi - 如何检测ApplyUpdates是否会插入或更新数据?

转载 作者:行者123 更新时间:2023-12-03 15:05:33 33 4
gpt4 key购买 nike

在 ClientDataSet 的 AfterPost 事件处理程序中,我需要当前记录的 ApplyUpdates 函数是否将执行更新或插入的信息。

将为新记录和更新记录执行 AfterPost 事件,并且我不想声明新的 Flag 变量来指示“更新”或“插入”操作是否正在进行。

示例代码:

procedure TdmMain.QryTestAfterPost(DataSet: TDataSet);
begin
if IsInserting(QryTest) then
// ShowMessage('Inserting')...
else
// ShowMessage('Updating');

QryTest.ApplyUpdates(-1);
end;

ApplyUpdate 完成后,应用程序将在 AfterPost 方法中写入日志。所以这个方法是最接近 Action 的地方,我更喜欢一个完全可以插入到这个事件处理程序中的解决方案。

如何使用 ClientDataSet 实例 QryTest 中的信息来实现 IsInserting 函数?

编辑:我将尝试 ClientDataSet.UpdateStatus,其解释为 here .

最佳答案

ApplyUpdates 不会为您提供该信息 - 因为它可以插入、更新和删除。

ApplyUpdates 应用存储在 Delta 数组上的更改信息。例如,该更改信息可以包含任意数量的不同类型的更改(插入、删除和更新),并且所有这些都将应用于同一个调用。

在 TDatasetProvider 上,您有 BeforeUpdateRecord 事件(或类似的事件, sleep 在内存上做了有趣的事情:-))。该事件在 Delta 的每条记录应用于底层数据库/数据集之前被调用,因此是获取此类信息的地方......但 Showmessage 将停止应用过程。

编辑:现在我记得还有另一个选项:您可以将 Delta 分配给另一个 clientdataset Data 属性并读取该记录的数据集 UpdateStatus。当然,您需要在执行 applyupdates 之前执行此操作...

var
cdsAux: TClientDataset;
begin
.
.
<creation of cdsAux>
cdsAUx.Data := cdsUpdated.Delta;
cdsAux.First;
case cdsAux.UpdateStatus of
usModified:
ShowMessage('Modified');
usInserted:
ShowMessage('Inserted');
usDeleted:
ShowMessage('Deleted'); // For this to work you have to modify
// TClientDataset.StatusFilter
end;
<cleanup code>
end;

关于delphi - 如何检测ApplyUpdates是否会插入或更新数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1096674/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com