Мир InterBase



Чтение метаданных


Помимо управления транзакциями, сессия предоставляет еще одну полезную возможность - получение метаданных для базы данных (о метаданных см. главу "Структура базы данных InterBase" (ч. 4)). Поскольку в некоторых системах, например в Microsoft Distributed Query, операция получения метаданных выполняется очень часто, то IBProvider хранит информацию о них в оперативной памяти (т. е. кеширует). Кэширование метаданных можно настраивать для обеспечения оптимального быстродействия. Определить режим кеширования можно через свойство инициализации источника данных "schema_cache" и свойство сессии - "Session Schema Cache". Этим свойствам можно присваивать следующие значения:

  • Кэширование запрещено. Данные будут всегда перечитываться.
  • Глобальное кеширование на уровне Data Source. Это режим по умолчанию.
  • Кеширование на уровне Session.
  • Если при запросе метаданных сессия содержит явно запущенную транзакцию, то провайдер не будет использовать дополнительную внутреннюю транзакцию для получения данных, а воспользуется уже существующей. Если явно запущенной транзакции нет, то IBProvider автоматически запустит внутреннюю транзакцию с уровнем изоляции, указанной в свойстве сессии "Autocommit Isolation Levels". Для запрещения автоматического запуска провайдером внутренних транзакций для извлечения метаданные необходимо определить в строке инициализации источника данных "inner_trans=false" или установить свойство сессии "Session InnerTrans=false".

    Получение и вывод списка таблиц базы данных:

    ADODB

    Dim cn As New ADODB.Connection

    Call cn.Open("file name=d:\database\employee.ibp")

    Dim rs As ADODB.Recordset

    Set rs = cn.OpenSchema(adSchemaTables)

    Cells.Clear

    Dim col As Long, row As Long

    row = 1

    'печать названия колоник

    For col = 0 To rs.Fields.Count - 1

    Cells(row, col + 1) = rs(col).Name

    Next col

    'печать содержимого

    While Not rs.EOF

    row = row + 1

    For col = 0 To rs.Fields.Count - 1

    Cellsfrow, col + 1) = rs(col).Value




    Содержание  Назад  Вперед