我正在使用TClientDataset
以及提供商的以下选项:
ResolveToDataSet = True
Options = [poPropogateChanges, poUseQuoteChar]
UpdateMode = upWhereKeyOnly
AfterUpdateRecord = DataSetProvider1AfterUpdateRecord
提供程序连接到TIBCQuery,后者管理NO_INVOICE密钥的生成器。
在AfterUpdateRecord上完成以下代码(在组中的许多位置找到,以便在发布到数据库时真正传播密钥更改)
DeltaDS.FieldByName(ClientDataSet1NO_INVOICE.FieldName).NewValue
:= SourceDS.FieldByName(ClientDataSet1NO_INVOICE.FieldName).NewValue
然后使用以下代码添加记录:
ClientDataSet1.Params[0].AsInteger := -1;
ClientDataSet1.Open;
ClientDataSet1.Edit;
ClientDataSet1NO_INVOICE.AsInteger := -1;
ClientDataSet1NO_STORE.AsInteger := 1;
ClientDataSet1.Post;
ClientDataSet1.ApplyUpdates(-1);
如果我在ClientDataSet1.Refresh
之后调用ApplyUpdate
,则使用原始参数-1重新打开基础TIBCQuery,而不是使用新密钥...即使ClientDataSet1NO_INVOICE.AsInteger
显示合并记录后分配的新值...
这里使用Refresh只是为了简化这个例子......当我们插入记录,应用更新并再次编辑记录时会出现问题。
我是否因使用ResolveToDataset
选项而遗漏了某些内容,还是应该使用新参数明确重新打开查询?
在将ResolveToDataset = False
用于其他项目之前,我从未遇到过这个问题...