3

我正在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......

4

0 回答 0