OnStart(Error: RepsitoryScriptInitError; FilesToProcess: Integer);
Error. Параметр, возвращающий ошибку, которая может возникнуть при подготовке к выполнению скрипта, и не позволяющую произвести дальнейшее выполнение скрипта.
FilesToProcess. Количество запросов, которые будут выполнены. Данный параметр возвращает значение 0, если при подготовке скрипта возникли какие-либо ошибки, либо репозиторий уже имеет последнюю версию.
Метод OnStart реализует событие, происходящее при подготовке скрипта к выполнению.
Для выполнения примера предполагается наличие сервера Oracle с наименованием «Test». На сервере в рамках схемы «TestSchema» создан репозиторий платформы. В корневом каталоге диска «С» имеется файл «current.rm4», содержащий скрип для создания и обновления репозитория.
Добавьте ссылки на системные сборки: Dal, Fore, IO.
Sub Main;
Var
Rsm: IRepositoryScriptManager;
Driv: IDalDriver;
ConDesc: IDalConnectionDescriptor;
Params: IDalConnectionDescriptorParams;
Con: IDalConnection;
CallBack: IRepositoryScriptCallback;
Begin
//Подключение к схеме на сервере Oracle
Driv := New DalOrcl8Driver.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("Schema").Value := "TestSchema";
Con := ConDesc.CreateConnection;
//Настройки менеджера репозитория
Rsm := New RepositoryScriptManager.Create;
Rsm.Connection := Con;
Rsm.Driver := RepositoryDriverType.ORCL9;
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». Информация о готовности к обновлению, а также об ошибках, которые могут возникнуть при выполнении запросов, будет выведена в консоль среды разработки.
См. также: