ITableCreator.Execute

Синтаксис

Execute: ITable;

Execute(): Prognoz.Platform.Interop.Db.ITable;

Описание

Метод Execute осуществляет создание таблицы и загрузку в нее данных.

Комментарии

При выполнении метода в соответствии с информацией, указанной в свойстве ObjectCreateInfo, в репозитории будет создана таблица. Также в базе данных, указанной в свойстве Database, будет создана соответствующая физическая таблица. Структура таблицы будет определена автоматически и будет соответствовать структуре источника данных, указанного в свойстве Source. После создания таблицы в нее из источника данных будут загружены данные.

Пример

Для выполнения примера в репозитории предполагается наличие базы данных с идентификатором «DB» и папки с идентификатором «FTable». В файловой системе предполагается наличие файла «c:\result.txt» с данными.

В примере используется пользовательский класс Converter. Реализация класса приведена в примере для IValueConverter.Convert.

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

Фрагмент файла «c:\result.txt»

Sub UserProc;
Var
    MB: IMetabase;
    Db: IDatabase;
    CrInfo: IMetabaseObjectCreateInfo;
    TextProvider: IDtTextProvider;
    Fields: IDtFieldDefinitions;
    TCreator: ITableCreator;
    Conv: Converter;
    TmpTable: ITable;
Begin
    
// Получаем текущий репозиторий
    MB := MetabaseClass.Active;
    
// Создаем источник данных для таблицы
    TextProvider := New DtTextProvider.Create;
    
// Указываем файл, из которого будут загружены данные
    TextProvider.File := "c:\result.txt";
    
// Указываем строку с заголовками
    TextProvider.HeaderRow := 1;
    
// Указываем символ, разделяющий поля
    TextProvider.DelimitedColumnDelimiter := ";";
    
// Задаем формат дат в файле
    TextProvider.StringDataFormat.DateFormat := "ГГГГ";
    
// Получаем поля из файла-источника
    Fields := TextProvider.Fields;
    
// Указываем тип данных полей
    Fields.Item(0).DataType := DbDataType.String;
    Fields.Item(
1).DataType := DbDataType.String;
    Fields.Item(
2).DataType := DbDataType.String;
    Fields.Item(
3).DataType := DbDataType.DateTime;
    Fields.Item(
4).DataType := DbDataType.Float;
    
// Создаем объект, предназначенный для создания полей
    TCreator := New TableCreator.Create;
    
// Указываем источник данных для создаваемой таблицы
    TCreator.Source := TextProvider;
    
// Создаем информацию о создаваемой таблице
    CrInfo := MB.CreateCreateInfo;
    
// Указываем папку, в которой будет создана таблица
    CrInfo.Parent := MB.ItemById("FTable");
    
// Указываем информацию о создаваемой таблице
    TCreator.ObjectCreateInfo := CrInfo;
    
// Получаем базу данных
    Db := MB.ItemById("DB").Bind As IDatabase;
    
// Указываем базу данных, в которой будут храниться данные таблицы
    TCreator.Database := Db;
    
// Указываем строку в источнике данных,
    // начиная с которой будут загружаться данные
    TCreator.DataRow := 0;
    
// Указываем количество строк, которое нужно загрузить
    TCreator.RowCount := 100;
    
// Указываем, что пустые строки будут пропущены
    TCreator.SkipEmptyRows := True;
    
// Создаем преобразователь значений
    Conv := New Converter.Create;
    
// Указываем, что значения поля «Value» должны быть преобразованы
    TCreator.AddConverter("Value", Conv);
    
// Создаем таблицу и загружаем в неё данные
    TmpTable := TCreator.Execute;
    
// Сохраняем созданную таблицу
    (TmpTable As IMetabaseObject).Save;
End Sub UserProc;

Imports Prognoz.Platform.Interop.Cubes;
Imports Prognoz.Platform.Interop.Dal;
Imports Prognoz.Platform.Interop.Db;
Imports Prognoz.Platform.Interop.Dt;
Imports Prognoz.Platform.Interop.Metabase;

Public Shared Sub Main(Params: StartParams);
Var
    MB: IMetabase;
    Db: IDatabase;
    CrInfo: IMetabaseObjectCreateInfo;
    TextProvider: IDtTextProvider;
    Fields: IDtFieldDefinitions;
    TCreator: ITableCreator;
    Conv: Converter;
    TmpTable: ITable;
Begin
    
// Получаем текущий репозиторий
    MB := Params.Metabase;
    
// Создаем источник данных для таблицы
    TextProvider := New DtTextProvider.Create();
    
// Указываем файл, из которого будут загружены данные
    TextProvider.File := "c:\result.txt";
    
// Указываем строку с заголовками
    TextProvider.HeaderRow := 1;
    
// Указываем символ, разделяющий поля
    TextProvider.DelimitedColumnDelimiter := ";";
    
// Задаем формат дат в файле
    TextProvider.StringDataFormat.DateFormat := "ГГГГ";
    
// Получаем поля из файла-источника
    Fields := TextProvider.Fields;
    
// Указываем тип данных полей
    Fields.Item[0].DataType := DbDataType.ddtString;
    Fields.Item[
1].DataType := DbDataType.ddtString;
    Fields.Item[
2].DataType := DbDataType.ddtString;
    Fields.Item[
3].DataType := DbDataType.ddtDateTime;
    Fields.Item[
4].DataType := DbDataType.ddtFloat;
    
// Создаем объект, предназначенный для создания полей
    TCreator := New TableCreator.Create();
    
// Указываем источник данных для создаваемой таблицы
    TCreator.Source := TextProvider;
    
// Создаем информацию о создаваемой таблице
    CrInfo := MB.CreateCreateInfo();
    
// Указываем папку, в которой будет создана таблица
    CrInfo.Parent := MB.ItemById["FTable"];
    
// Указываем информацию о создаваемой таблице
    TCreator.ObjectCreateInfo := CrInfo;
    
// Получаем базу данных
    Db := MB.ItemById["DB"].Bind() As IDatabase;
    
// Указываем базу данных, в которой будут храниться данные таблицы
    TCreator.Database := Db;
    
// Указываем строку в источнике данных,
    // начиная с которой будут загружаться данные
    TCreator.DataRow := 0;
    
// Указываем количество строк, которое нужно загрузить
    TCreator.RowCount := 100;
    
// Указываем, что пустые строки будут пропущены
    TCreator.SkipEmptyRows := True;
    
// Создаем преобразователь значений
    Conv := New Converter.Create();
    
// Указываем, что значения поля «Value» должны быть преобразованы
    TCreator.AddConverter("Value", Conv);
    
// Создаем таблицу и загружаем в неё данные
    TmpTable := TCreator.Execute();
    
// Сохраняем созданную таблицу
    (TmpTable As IMetabaseObject).Save();
End Sub;

После выполнения примера в папке «FTable» будет создана таблица. Структура таблицы будет сформирована автоматически на основании данных из файла «c:\result.txt». В таблицу будут загружены первые сто строк данных, пустые строки будут пропускаться. Значения, загружаемые из поля «Value», будут округлены.

См. также:

ITableCreator