Delphi: проблема с ResolveToDataset

Я использую 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базовый TIBCQuery открывается с исходным параметром -1, а не с новым ключом... даже если ClientDataSet1NO_INVOICE.AsInteger показывает новое значение, назначенное после слияния записей... Использование Refresh здесь только для упрощения этого примера... Проблемы возникают, когда мы вставляем запись, применяем обновления и снова редактируем запись.

Я что-то пропустил с использованием ResolveToDataset вариант или я должен заново открыть запрос с новым параметром?

У меня никогда не было этой проблемы раньше при использовании ResolveToDataset = False на других проектах...

0 ответов

Другие вопросы по тегам