Commit: Boolean;
Commit(): boolean;
Метод Commit применяет обновление (сохраняет значение записей из буфера в источник данных).
При обновлении записи происходит поиск существующей записи в источнике данных по значениям ключевых полей. Искомые значения берутся из буфера. Если запись не найдена, то в источник данных будет добавлена новая запись.
Для выполнения примера предполагается наличие в репозитории таблицы с идентификатором «SOURSE». В таблице имеется три целочисленных поля.
Добавьте ссылки на системные сборки Metabase, Db.
Sub UserProc;
Var
MB: IMetabase;
Dsi: IDatasetInstance;
Fields: IDatasetInstanceFields;
Dbu: IDatasetBatchUpdate;
Vals: Array[0..2] Of Variant;
i: Integer;
Begin
MB := MetabaseClass.Active;
Dsi := MB.ItemById("SOURSE").Open(Null) As IDatasetInstance;
Fields := Dsi.Fields;
Dbu := Dsi.CreateBatchUpdate;
Dbu.BatchCommand := DatasetBatchCommand.Update;
Dbu.KeyFieldNames := Fields.Item(0).Id;
Dbu.FailPolicy := DatasetFailPolicy.CommitByRow;
Dbu.BeginUpdate;
While Not Dsi.Eof Do
i := Fields.Item(0).Value As Integer;
If i > 100 Then
Vals[0] := i;
Vals[1] := Fields.Item(1).Value;
Vals[2] := (i - (Fields.Item(1).Value As Integer)) * 100;
Dbu.AddRecord(Vals);
End If;
Dsi.Next;
End While;
Dbu.Commit;
End Sub UserProc;
После выполнения примера в таблице будут обновлены записи, значения первого поля которых, больше 100. При обновлении будет изменено значение третьего поля с учетом значений предыдущих двух полей.
Необходимые требования и результат выполнения примера Fore.NET совпадают с примером Fore.
Imports Prognoz.Platform.Interop.Db;
…
Public Shared Sub Main(Params: StartParams);
Var
MB: IMetabase;
Dsi: IDatasetInstance;
Fields: IDatasetInstanceFields;
Dbu: IDatasetBatchUpdate;
Vals: Array[0..2] Of object;
i: Integer;
Begin
MB := Params.Metabase;
Dsi := MB.ItemById["SOURSE"].Open(Null) As IDatasetInstance;
Fields := Dsi.Fields;
Dbu := Dsi.CreateBatchUpdate();
Dbu.BatchCommand := DatasetBatchCommand.dbcUpdate;
Dbu.KeyFieldNames := Fields.Item[0].Id;
Dbu.FailPolicy := DatasetFailPolicy.dfpCommitByRow;
Dbu.BeginUpdate();
While Not Dsi.Eof() Do
i := Fields.Item[0].Value As Integer;
If i > 100 Then
Vals[0] := i;
Vals[1] := Fields.Item[1].Value;
Vals[2] := (i - (Fields.Item[1].Value As Integer)) * 100;
Dbu.AddRecord(Vals);
End If;
Dsi.Next();
End While;
Dbu.Commit();
End Sub;
См. также: