KeepCalcFields: Boolean;
Свойство KeepCalcFields определяет признак сохранения списка вычисляемых полей при смене источника/приёмника данных.
После задания настроек источника/приёмника при вызове метода FieldsFromFile будет заполнена коллекция полей Fields. Также в эту коллекцию могут быть добавлены собственные вычисляемые поля. По умолчанию свойству KeepCalcFields установлено значение False, при этом при смене источника/приёмника список полей в коллекции Fields будет сброшен и загружен в соответствии со структурой нового источника/приёмника. Сбрасываются также и добавленные вычисляемые поля. Если список вычисляемых полей необходимо сохранить, то установите свойству KeepCalcFields значение True.
Для выполнения примера предполагается наличие двух текстовых файлов 1.txt и 2.txt.
Добавьте ссылки на системные сборки: Dal, Dt, Metabase.
Sub UserProc;
Var
TextProvider: IDtTextProvider;
Fields: IDtFieldDefinitions;
Field: IDtFieldDefinition;
Begin
// Настройка источника
TextProvider := New DtTextProvider.Create;
TextProvider.File := "D:\Work\1.txt";
TextProvider.Encoding := "WIN";
TextProvider.DelimitedTextQualifier := '"';
TextProvider.DelimitedColumnDelimiter := " ";
TextProvider.RowDelimiter := #13 + #10;
TextProvider.HeaderRow := 1;
TextProvider.AutoFillFieldsMode := DtAutoFillFieldsMode.DataRow;
TextProvider.TypeGuessRows := 5;
// Загрузка списка полей из источника
TextProvider.FieldsFromFile;
TextProvider.Metabase := MetabaseClass.Active;
Fields := TextProvider.Fields;
// Добавление вычисляемого поля
Field := Fields.Add;
Field.Name := "Calculate";
Field.DataType := DbDataType.Float;
Field.Expression.AsString := Fields.Item(2).Name + " * 10";
// Количество полей до замены файла
Debug.WriteLine("Поля до замены файла: " + TextProvider.Fields.Count.ToString);
ShowFields(Fields);
// Смена файла
TextProvider.KeepCalcFields := True;
TextProvider.File := "D:\Work\2.txt";
// Количество полей после замены файла
Debug.WriteLine("Поля после замены файла: " + TextProvider.Fields.Count.ToString);
ShowFields(Fields);
End Sub UserProc;
Sub ShowFields(Fields: IDtFieldDefinitions);
Var
Field: IDtFieldDefinition;
Begin
For Each Field In Fields Do
Debug.Write(Field.Name + ' ');
End For;
Debug.WriteLine("");
End Sub ShowFields;
При выполнении примера будет создан источник, импортирующий данные из текстового файла. После задания настроек осуществляется чтение списка полей из файла 1.txt, добавляется одно вычисляемое поле. Затем в качестве источника устанавливается файл 2.txt, при этом список полей загружается из файла заново. Список полей, полученных из первого и второго файла, с учётом вычисляемого поля будет выведен в консоль среды разработки.
См. также: