IsDatabaseValid: Boolean;
IsDatabaseValid: boolean;
Свойство IsDatabaseValid возвращает признак того, присутствует ли в текущем репозитории БД, к которой выполняет запрос SQL-оператор.
Свойство доступно только для чтения.
Допустимые значения:
True. БД присутствует в текущем репозитории;
False. БД отсутствует в текущем репозитории. Для корректного выполнения обновления необходимо определить новую БД для SQL-оператора. Сделать это можно при помощи свойства IMetabaseUpdateSqlNode.Database или IMetabaseUpdateObjectNode.Object (объект IMetabaseUpdateObjectNode возвращает свойство IMetabaseUpdateSqlNode.DatabaseNode).
Примечание. Перед проверкой, присутствует ли в текущем репозитории база данных, к которой выполняет запрос SQL-оператор, необходимо проверить корректность обновления. Для этого используйте метод IMetabaseUpdate.Prepare.
Для выполнения примера предполагается наличие файла обновления «C:\Update.pef». В репозитории должна присутствовать БД с идентификатором «OBJ_DB».
Добавьте ссылку на системную сборку «Metabase».
Sub UserProc;
Var
MB: IMetabase;
Update: IMetabaseUpdate;
UFN: IMetabaseUpdateFolderNode;
i: Integer;
UpdateObj: IMetabaseUpdateSqlNode;
DbNode: IMetabaseUpdateObjectNode;
Begin
MB := MetabaseClass.Active;
Update := Mb.CreateUpdate;
Update.LoadFromFile("C:\Update.pef");
Update.Prepare;
UFN := Update.RootFolder;
For i := 0 To UFN.Count - 1 Do
If UFN.Item(i) Is IMetabaseUpdateSqlNode Then
UpdateObj := UFN.Item(i) As IMetabaseUpdateSqlNode;
If Not UpdateObj.IsDatabaseValid Then
DbNode := UpdateObj.DatabaseNode;
If DbNode <> Null Then
DbNode.Object := MB.ItemById("OBJ_DB");
Else UpdateObj.Database := MB.ItemById("OBJ_DB").Key;
End If;
End If;
End If;
End For;
Update.SaveToFileNF("C:\Update.pefx");
End Sub UserProc;
После выполнения примера будет открыто обновление «C:\Update.pef». Для всех SQL-операторов в обновлении будет проверено наличие необходимой БД. Если БД отсутствует в текущем репозитории, то она будет заменена на БД «OBJ_DB». Изменения будут сохранены.
Необходимые требования и результат выполнения примера Fore.NET совпадают с примером Fore.
Public Shared Sub Main(Params: StartParams);
Var
MB: IMetabase;
Update: IMetabaseUpdate;
UFN: IMetabaseUpdateFolderNode;
i: Integer;
UpdateObj: IMetabaseUpdateSqlNode;
DbNode: IMetabaseUpdateObjectNode;
Begin
MB := Params.Metabase;
Update := Mb.CreateUpdate();
Update.LoadFromFileNF("C:\" + "Update.pef", UpdateLoadMode.ulmInsertUpdate);
Update.Prepare();
UFN := Update.RootFolder;
For i := 0 To UFN.Count - 1 Do
If UFN.Item[i] Is IMetabaseUpdateSqlNode Then
UpdateObj := UFN.Item[i] As IMetabaseUpdateSqlNode;
If Not UpdateObj.IsDatabaseValid Then
DbNode := UpdateObj.DatabaseNode;
If DbNode <> Null Then
DbNode.Object := MB.ItemById["OBJ_DB"];
Else UpdateObj.Database := MB.ItemById["OBJ_DB"].Key;
End If;
End If;
End If;
End For;
Update.SaveToFileNF("C:\" + "Update.pefx");
End Sub;
См. также: