IRepositoryScriptCallback.BeginStatement

Синтаксис

BeginStatement(Statement: String);

Параметры

Statement - запрос, который будет выполнен.

Описание

Метод BeginStatement реализует событие, происходящее перед началом выполнения запроса скрипта.

Пример

Для выполнения примера предполагается наличие сервера ORCL с наименованием «Test». На сервере в рамках схемы «TestSchema» создан репозиторий платформы. В корневом каталоге диска «С» имеется файл «current.rm4», содержащий скрипт для создания и обновления репозитория.

Sub Main;

Var

Rsm: IRepositoryScriptManager;

Driv: IDalDriver;

ConDesc: IDalConnectionDescriptor;

Params: IDalConnectionDescriptorParams;

Con: IDalConnection;

CallBack: IRepositoryScriptCallback;

Begin

//Подключение к схеме на сервере ORCL

Driv := New DalOrclDriver.Create As IDalDriver;

ConDesc := Driv.CreateDescriptor;

Params := ConDesc.Params;

Params.Find("User Name").Value := "TestSchema";

Params.Find("Password").Value := "TestSchema";

Params.Find("Host BSTR").Value := "Test";

Params.Find("Scheme").Value := "TestSchema";

Con := ConDesc.CreateConnection;

//Настройки менеджера репозитория

Rsm := New RepositoryScriptManager.Create;

Rsm.Connection := Con;

Rsm.Driver := RepositoryDriverType.ORCL;

Rsm.Operation := RepositoryOperationType.Update;

//Обновление репозитория

Rsm.Repository := RepositoryType.Metabase;

Rsm.LoadScript(New FileStream.Create("c:\current.rm4", FileOpenMode.Read, FileShare.Exclusive));

CallBack := New ScrCallback.Create;

Rsm.Execute(CallBack);

End Sub Main;

 

Class ScrCallback: RepositoryScriptCallback

s: String;

 

Public Sub OnStart(Error: RepsitoryScriptInitError; FilesToProcess: Integer);

Begin

Debug.WriteLine("Начало обновления");

Select Case Error

Case RepsitoryScriptInitError.None:

Debug.WriteLine("Количество запросов, которые будут выполнены: " + FilesToProcess.ToString);

Case RepsitoryScriptInitError.NoTables:

Debug.WriteLine("В указанной базе нет таблиц репозитория");

Case RepsitoryScriptInitError.TablesAlreadyExist:

Debug.WriteLine("В указанной базе уже есть таблицы репозитория");

Case RepsitoryScriptInitError.EmptyRepository:

Debug.WriteLine("Пустой репозиторий для обновления");

Case RepsitoryScriptInitError.CannotUpdateVers:

Debug.WriteLine("Версию репозитория обновить нельзя");

Case RepsitoryScriptInitError.UnicodeMismatch:

Debug.WriteLine("Юникод версии репозитория в базе и файле обновления не совпадает");

End Select;

End Sub OnStart;

 

Public Sub BeginStatement(Statement: String);

Begin

s := Statement;

End Sub BeginStatement;

 

Public Sub EndStatement(bError: Boolean; Message: String; Var Cancel: Boolean);

Begin

If bError = True Then

Debug.WriteLine("При выполнении кода возникла ошибка!");

Debug.Indent;

Debug.WriteLine("Запрос: " + s);

Debug.WriteLine("Ошибка: " + Message);

Debug.Unindent;

Cancel := False;

End If;

End Sub EndStatement;

 

Public Sub OnFinish;

Begin

Debug.WriteLine("Обновление окончено");

End Sub OnFinish;

End Class ScrCallback;

После выполнения примера будет осуществлено обновление версии репозитория в соответствии с содержимым файла «current.rm4». Для отслеживания процесса обновления используется пользовательский класс «ScrCallback». Информация о готовности к обновлению, а также об ошибках, которые могут возникнуть при выполнении запросов, будет выведена в консоль среды разработки.

См. также:

IRepositoryScriptCallback