我正在TClientDataset
为提供程序使用以下选项:
ResolveToDataSet = True
Options = [poPropogateChanges, poUseQuoteChar]
UpdateMode = upWhereKeyOnly
AfterUpdateRecord = DataSetProvider1AfterUpdateRecord
提供程序连接到管理 NO_INVOICE 密钥生成器的 TIBCQuery。
在 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
......