TempDB.UpdateFromGroups

From SunFlurry wiki
Jump to: navigation, search
  UpdateFromGroups (Заполнение подчиненных записей)
Объект:Временная таблица базы данных
Статус разработки: Реализована
Тип:Функция
Обращение к БД:Сервер и БД
Исключения:Невозможно превратить в строку, неверные наименования столбцов, неверные аргументы, ошибка сервера
Визуальность:Нет

Функция выполняет заполнение обычных столбцов значениями столбцов группировки. Функция используется, при загрузке из сложных строчных частей с промежуточными группировками или подобных случаев. При обходе записей таблицы, записи, для которых условие аргумента 1 выполнено, будут считаться записями группировки, если условие не выполняется, запись считается подчиненной записью и значения столбцов из аргумента 3 будут заполнены из записи предыдущей группировки. Выполнение функции может занимать продолжительное время, так как серверы базы данных (типа SQL) не имеют функционала для выполнения таких операции с помощью функций, оперирующих наборами записей. Пример сортировки таблицы с тремя столбцами:

Sort GroupID Value       Sort GroupID  Value
 11    1      5           11    1      5
 22    0      ?           22    0      5
 33    0      ?           33    0      5 
 34    0      ?      ->   34    0      5
 35    2      17          35    2      17
 37    0      ?           37    0      17
 80    0      ?           80    0      17
 81    0      ?           81    0      17

При выполнении функции UpdateFromGroups("GroupID<>0","Sort+","Value") над первой таблицей, получается вторая таблица. Содержимое значений столбцов, помеченных "?", не имеет значения.

Синтаксис

TempDB.UpdateFromGroups(<Условие для определения строк группировки (STRING)>,<Наименования столбцов сортировки с направлением сортировки (STRING)>,<Наименования заполняемых столбцов (STRING)>,<Стандартные фильтры>...)

Аргументы

  • <Условие для определения строк группировки (STRING)> - Аргумент задает условие на языке запросов (см. Временная таблица базы данных). При обходе записей таблицы, записи, для которых условие выполнено, будут считаться записями группировки, если условие не выполняется, запись считается подчиненной записью и значения столбцов из аргумента 3 будут заполнены из записи предыдущей группировки.
  • <Наименования столбцов сортировки с направлением сортировки (STRING)> - Задает наименования столбцов для последовательности сортировки через запятую. Формат задания столбца: <Наименование столбца>{+,-}, если оба знака направления + или - опущены, будет использована сортировка по неубыванию (+). Вне зависимости от наличия или отсутствия указания на столбцы сортировки при обходе таблицы, система всегда использует последнюю сортировку по уникальному индексу записи @ID.
  • <Стандартные фильтры> - (необязательный аргумент) Стандартные фильтры отбора записей текущей таблицы данных описаны в статье Стандартные фильтры. Важное отличие от фильтров функций объектов базы данных заключается в том, что стандартные фильтры всегда работают в сложном (расширенном) режиме, при этом отсутствует требование, что первая строка фильтра должна начинаться на знак ~. Выражения фильтров содержат весь возможный набор функций и операторов языка запросов (см. Временная таблица базы данных, Объект запрос базы данных), при указании наименование также применимы префиксы (типа :), как это описано в статье по временной таблице базы данных. Записи таблицы, не входящие в фильтр, будут пропущены при изменении.

Примеры

//Показан код примера, приведенного в описании функции
aTab:=Tab.Create("Sort,GroupID,Value");
aTab.AddLine("Sort,GroupID,Value",11,1,5);
aTab.AddLine("Sort,GroupID,Value",22,0,33);
aTab.AddLine("Sort,GroupID,Value",33,0,77);
aTab.AddLine("Sort,GroupID,Value",34,0,534);
aTab.AddLine("Sort,GroupID,Value",35,2,17);
aTab.AddLine("Sort,GroupID,Value",37,0,0);
aTab.AddLine("Sort,GroupID,Value",80,0,1);
aTab.AddLine("Sort,GroupID,Value",81,0,-10);

//Создание и загрузка таблицы
aTemp:=TempDB.Create("Sort:INT,GroupID:INT,Value:INT");
aTemp.CopyFrom(aTab,"Sort,GroupID,Value");

//Преобразование значений столбца Value
aTemp.UpdateFromGroups("GroupID<>0","Sort+","Value");

Message("Sort; GroupID; Value");
aTemp.Select();
While aTemp.Next() Do
  Message(""+aTemp.Sort+"; "+aTemp.GroupID+"; "+aTemp.Value);
EndDo;