Я использую 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
в других проектах ...