Delphi: проблема с набором цветовых данных

#delphi #tclientdataset

#delphi #набор данных tclientdataset

Вопрос:

Я использую 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 отображается новое значение, присвоенное после объединения записей…
Обновление здесь используется только для упрощения этого примера… Проблемы возникают, когда мы вставляем запись, применяем обновления и снова редактируем запись.

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

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

Комментарии:

1. Почему Edit а не Insert или Append добавить запись? Является ли ваш ClientDataSet1.Params[0].ParamType = ptInputOutput?

2. При редактировании возникла проблема с копированием и вставкой… Та же проблема с append. Странно, что IBCQuery (от Devart) не поддерживает параметры ptInputOutpout… это выдает: Динамическая ошибка SQL Код ошибки SQL = -804 SQLDA отсутствует или неправильная версия, или неправильное количество / тип переменных’