EndStatement(bError: Boolean; Message: String; Var Cancel: Boolean);
bError is an indicator of error when executing a query. The parameter returns True if error occurs when executing the query passed in the Statement parameter of the BeginStatement event.
Message is an error message that occurred when executing the query.
Cancel is a variable that determines if the rest of the script queries are executed. If the variable value is True, script executing will be stopped, if not, it will be continued.
The EndStatement method implements an event that takes place after the query execution.
When changing the Cancel parameter it is possible to process the situations that can occur on executing the query in this event. Executing query is passed in the Statement parameter of the BeginStatement event.
Executing the example requires the ORCL server named Test. Platform repository was created within the TestSchema scheme on the server. The root of disk C contains the current.rm4 file that includes the script for repository creating and updating.
Sub Main;
Var
Rsm: IRepositoryScriptManager;
Driv: IDalDriver;
ConDesc: IDalConnectionDescriptor;
Params: IDalConnectionDescriptorParams;
Con: IDalConnection;
CallBack: IRepositoryScriptCallback;
Begin
//Connection to the scheme on the ORCL server
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;
//Settings of the repository manager
Rsm := New RepositoryScriptManager.Create;
Rsm.Connection := Con;
Rsm.Driver := RepositoryDriverType.ORCL;
Rsm.Operation := RepositoryOperationType.Update;
//Repository updating
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("Start of updating");
Select Case Error
Case RepsitoryScriptInitError.None:
Debug.WriteLine("Number of queries that will be executed: " + FilesToProcess.ToString);
Case RepsitoryScriptInitError.NoTables:
Debug.WriteLine("There are no repository tables in the specified base");
Case RepsitoryScriptInitError.TablesAlreadyExist:
Debug.WriteLine("There are already repository tables in the specified base");
Case RepsitoryScriptInitError.EmptyRepository:
Debug.WriteLine(Empty repository for updating");
Case RepsitoryScriptInitError.CannotUpdateVers:
Debug.WriteLine("Repository version can not be updated");
Case RepsitoryScriptInitError.UnicodeMismatch:
Debug.WriteLine("Unicode of the repository version does not coincide in the base and in the file");
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("Error occurs when executing the code!");
Debug.Indent;
Debug.WriteLine("Query: " + s);
Debug.WriteLine("Error: " + Message);
Debug.Unindent;
Cancel := False;
End If;
End Sub EndStatement;
Public Sub OnFinish;
Begin
Debug.WriteLine("Updating is completed");
End Sub OnFinish;
End Class ScrCallback;
After executing the example the repository version is updated in accordance with the contents of the current.rm4 file. The ScrCallback custom class is used to track the process of update. Information about readiness for updating and about errors that can occur when executing the queries is displayed in the development environment console.
See also: