Delphi: проблема с ResolveToDataset - PullRequest
3 голосов
/ 02 июня 2011

Я использую TClientDataset со следующими параметрами для провайдера:

ResolveToDataSet = True
Options = [poPropogateChanges, poUseQuoteChar]
UpdateMode = upWhereKeyOnly
AfterUpdateRecord = DataSetProvider1AfterUpdateRecord

Поставщик подключен к TIBCQuery, который управляет генератором для ключа NO_INVOICE.

Вкл.ПослеUpdateRecord выполняется следующий код (который встречается во многих местах в группах для реального распространения изменения ключа при публикации в базе данных)

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 в других проектах ...

...