IDtProvider.CalcFieldsErrors

Синтаксис Fore

CalcFieldsErrors: IDtCalcFieldErrors;

Синтаксис Fore.NET

CalcFieldsErrors: Prognoz.Platform.Interop.Dt.IDtCalcFieldErrors;

Описание

Свойство CalcFieldsErrors возвращает коллекцию ошибок, возникших при расчете вычисляемых полей.

Комментарии

Ошибки могут было получены только после вызова одного из следующих методов: IDtProvider.Fetch, IDtProvider.FetchRows.

Пример Fore

Для выполнения примера в файловой системе предполагается наличие файла «c:\Import Text.txt» с данными.

Добавьте ссылки на системные сборки: Dal, Dt, Metabase.

Содержимое файла «c:\Import Text.txt»

Sub UserProc;
Var
    DTProvider: IDtTextProvider;
    Errors: IDtCalcFieldErrors;
    Error: IDtCalcFieldError;
    fields: IdtFieldDefinitions;
    field: IdtFieldDefinition;
    i: Integer;
    v: Array;
    data: Variant;
    Text: String;
Begin
    // Создаем источник данных
    DTProvider := New DtTextProvider.Create;
    // Задаем базовые параметры источника
    DTProvider.FormatType := DtTextFormatType.Delimited;
    DTProvider.RangeHasHeader := True;
    DTProvider.AutoFillFieldsMode := DtAutoFillFieldsMode.DataRow;
    DTProvider.TypeGuessRows := 10;
    DTProvider.Metabase := MetabaseClass.Active;
    DTProvider.DelimitedColumnDelimiter := ";";
    DTProvider.Encoding := "WIN";
    DTProvider.DelimitedTextQualifier := """";
    // Указываем файл, из которого будут браться данные
    DtProvider.File := "c:\Import Text.txt";
    // Получаем поля источника из файла
    DTProvider.FieldsFromFile;
    fields := DTProvider.Fields;
    // Указываем тип данных для поля с индексом 1 из источника данных
    fields.Item(1).DataType := DbDataType.Integer;
    // Добавляем новое вычисляемое поле в источник данных
    field := fields.Add;
    field.Name := "CalcField";
    field.DataType := DbDataType.Integer;
    // Задаем выражение для расчета значения поля
    field.Expression.AsString := fields.Item(1).Name + "+6";
    // Задаём параметры обработки ошибок, возникших при расчете вычисляемых полей
    Errors := DtProvider.CalcFieldsErrors;
    Errors.MaxErrors := -1;
    Errors.MaxItems := -1;
    // Открываем источник данных        
    DTProvider.Open;
    // Выводим названия полей в окно консоли            
    Text := "";
    For i := 0 To fields.Count - 1 Do
        field := fields.Item(i);
        Text := Text + (field.Name + "; ");
    End For;
    Debug.WriteLine(Text);
    // Выводим значения полей в окно консоли
    While Not DTProvider.Eof Do
        DTProvider.Fetch(v);
        Text := "";
        For i := 0 To v.Length - 1 Do
            data := v[i];
            Text := Text + (data + " ");
        End For;
        Debug.WriteLine(Text);
    End While;
    // Закрываем источник данных        
    DTProvider.Close;
    // Выводим ошибки в окно консоли
    For Each Error In Errors Do
        Debug.WriteLine("В строке №" + Error.Row.ToString + " в поле " + Error.Field + " произошла ошибка");
        Debug.WriteLine("Текст ошибки: " + Error.Message);
    End For;
End Sub

В результате выполнения примера будут загружены данные из файла «c:\Import Textt.txt». Будет создано вычисляемое поле со следующим выражением: значение поля с индексом «1» из источника данных будет увеличено на шесть. Результаты будут выгружены в окно консоли. Если в процессе вычисления формулы возникнут ошибки, то они будут выведены в окно консоли.

Пример Fore.NET

Необходимые требования и результат выполнения примера Fore.NET совпадают с примером Fore.

Public Shared Sub Main(Params: StartParams);
Var
    DTProvider: IDtTextProvider;
    Errors: IDtCalcFieldErrors;
    Error: IDtCalcFieldError;
    fields: IdtFieldDefinitions;
    field: IdtFieldDefinition;
    i: Integer;
    v: Array;
    data: object;
    Text: String;
Begin
    // Создаем источник данных
    DTProvider := New DtTextProvider.Create();
    // Задаем базовые параметры источника
    DTProvider.FormatType := DtTextFormatType.tftDelimited;
    DTProvider.RangeHasHeader := True;
    DTProvider.AutoFillFieldsMode := DtAutoFillFieldsMode.affmDataRow;
    DTProvider.TypeGuessRows := 10;
    DTProvider.Metabase := Params.Metabase;
    DTProvider.DelimitedColumnDelimiter := ";";
    DTProvider.Encoding := "WIN";
    DTProvider.DelimitedTextQualifier := """";
    // Указываем файл, из которого будут браться данные
    DtProvider.File := "c:\Import Text.txt";
    // Получаем поля источника из файла
    DTProvider.FieldsFromFile();
    fields := DTProvider.Fields;
    // Указываем тип данных для поля с индексом 1 из источника данных
    fields.Item[1].DataType := DbDataType.ddtInteger;
    // Добавляем новое вычисляемое поле в источник данных
    field := fields.Add();
    field.Name := "CalcField";
    field.DataType := DbDataType.ddtInteger;
    // Задаем выражение для расчета значения поля
    field.Expression.AsString := fields.Item[1].Name + "+6";
    // Задаём параметры обработки ошибок, возникших при расчете вычисляемых полей
    Errors := DtProvider.CalcFieldsErrors;
    Errors.MaxErrors := -1;
    Errors.MaxItems := -1;
    // Открываем источник данных        
    DTProvider.Open();
    // Выводим названия полей в окно консоли            
    Text := "";
    For i := 0 To fields.Count - 1 Do
        field := fields.Item[i];
        Text := Text + (field.Name + "; ");
    End For;
    System.Diagnostics.Debug.WriteLine(Text);
    // Выводим значения полей в окно консоли
    While Not DTProvider.Eof Do
        DTProvider.Fetch(Var v);
        Text := "";
        For i := 0 To v.Length - 1 Do
            data := v[i];
            Text := Text + (data + " ");
        End For;
        System.Diagnostics.Debug.WriteLine(Text);
    End While;
    // Закрываем источник данных        
    DTProvider.Close();
    // Выводим ошибки в окно консоли
    For Each Error In Errors Do
        System.Diagnostics.Debug.WriteLine("В строке №" + Error.Row.ToString() + " в поле " + Error.Field + " произошла ошибка");
        System.Diagnostics.Debug.WriteLine("Текст ошибки: " + Error.Message);
    End For;
End Sub;

См. также:

IDtProvider