Описание
Объект Database представляет открытую базу данных.
Замечания
Работа с открытой базой данных ведется с помощью объекта Database и его методов и свойств. Для баз данных любого типа пользователь имеет следующие возможности:
В базах данных Microsoft Jet (файлы .mdb) можно использовать другие методы, свойства и семейства для работы с объектом Database, а также для создания, изменения или получения информации о содержащихся в базе данных таблицах, запросах и связях. Например, пользователь имеет возможность:
В рабочей области ODBCDirect пользователь имеет возможность:
1. С помощью свойства Connection получить ссылку на объект Connection, соответствующий объекту Database.
При вызове метода CreateDatabase создается постоянный объект Database, который автоматически добавляется в семейство Databases, что приводит к его сохранению на диске.
При использовании метода OpenDatabase нет необходимости указывать объект DBEngine.
Открытие базы данных, содержащей присоединенные таблицы, не приводит к автоматическому установлению связей с указанными внешними файлами или источниками данных ODBC, подключенными к ядру Microsoft Jet. В этом случае требуется либо указать ссылку на соответствующие таблице объекты TableDef или Field, либо открыть для таблицы объект Recordset. Если связи установить не удается, возникает перехватываемая ошибка. К возникновению перехватываемой ошибки приводит также отсутствие необходимых разрешений на доступ к базе данных или попытка установить связь с базой данных, открытой другим пользователем для монопольного доступа.
Допускается также непосредственное открытие с помощью метода OpenDatabase внешней базы данных (такой как FoxPro, dBASE или Paradox) вместо открытия базы данных с ядром Microsoft Jet с последующим присоединением внешних таблиц.
Не рекомендуется непосредственно открывать объект Database для источника данных ODBC, подключенного к ядру Microsoft Jet, такого как Microsoft SQL Server, поскольку запрос возвращает данные медленнее, чем присоединенные таблицы. При открытии объекта Database для внешних бах данных с драйверами ISAM, таких как FoxPro или Paradox, проблем с быстродействием не возникает.
При завершении выполнения процедуры, в которой описан объект Database, этот локальный объект Database закрывается вместе со всеми открытыми объектами Recordset. Любые незавершенные изменения при этом теряются, а незавершенные транзакции свертываются без возникновения перехватываемой ошибки. Чтобы избежать потери изменений пользователь должен в явном виде до выхода из процедуры завершить все транзакции или операции редактирования и закрыть объекты Recordset и объекты Database, описанные в этой процедуре на локальном уровне.
После применения к объекту Workspace одного из методов управления транзакциями (BeginTrans, CommitTrans или Rollback) эти транзакции применяются ко всем базам данных, открытым в объекте Workspace, в котором был открыт этот объект Database. Для того чтобы выполнить независимую транзакцию, следует предварительно открыть дополнительный объект Workspace, а затем открыть в этом объекте Workspace еще один объект Database.
Можно открыть источник данных или базу данных несколько раз, создавая повторяющиеся имена в семействе Databases. После этого следует присвоить объекты Database объектным переменным и ссылаться на объекты по именам переменных.
Пример
Следующая программа создает объект Database и открывает существующий объект Database в стандартном объекте Workspace. Затем печатается семейство Databases и семейство Properties каждого объекта Database.
Sub DatabaseObjectX() Dim wrkJet As Workspace Dim dbsNorthwind As Database Dim dbsNew As Database Dim dbsLoop As Database Dim prpLoop As Property Set wrkJet = CreateWorkspace("JetWorkspace", "admin", "", dbUseJet) ' Проверяет, что нет файла, имя которого совпадает с именем ' новой базы данных. If Dir("NewDB.mdb") <> "" Then Kill "NewDB.mdb" ' Создает новую базу данных с указанной ' языковой настройкой. Set dbsNew = wrkJet.CreateDatabase("NewDB.mdb", dbLangGeneral) Set dbsNorthwind = wrkJet.OpenDatabase("Борей.mdb") ' Отображает семейство Databases. For Each dbsLoop In wrkJet.Databases With dbsLoop Debug.Print "Свойства " & .Name ' Отображает семейство Properties каждого ' объекта Database. For Each prpLoop In .Properties If prpLoop <> "" Then Debug.Print " " & prpLoop.Name & " = " & prpLoop Next prpLoop End With Next dbsLoop dbsNew.Close dbsNorthwind.Close wrkJet.Close End Sub