Работа с объектами базы данных Access через Ole Automation в C++ Builder

Данная задача уже была рассмотрена в статье «Работа с объектами базы данных Access через Ole Automation на примере открытия отчёта». Однако там был приведён пример реализации на Delphi.

В C++ Builder работа с COM, в частности c Ole Automation, имеет некоторые особенности, вследствие которых для решения этой и подобных задач требуется несколько иной подход. Поэтому в этой статье рассматриваются в первую очередь особенности реализации в С++ Builder. Сама постановка задачи и её решение более подробно изложены в статье указанной выше.

В отличие от Delphi и ряда других языков программирования, включая диалекты языка C++, в C++Builder нет прямого доступа к свойствам и методам OLE объекта. Вместо этого все операции с ними выполняются посредством набора из 4х функций, которым имена свойств и методов передаются в виде строковых параметров..

  • OlePropertyGet – получить свойство OLE объекта;
  • OlePropertySet – задать свойство OLE объекта;
  • OleProcedure – для обращения к OLE процедурам;
  • OleFunction – для обращения к OLE функциям.

Поэтому если подключение к COM серверу в C++ Builder происходит ещё относительно «привычным» способом.

Variant Access;
Access = CreateOleObject("Access.Application");

То для установки свойства Visible уже требуется использовать OlePropertySet.

Access.OlePropertySet("Visible", true);

Аналогичная ситуация при открытии базы данных (БД).

Access.OleFunction("OpenCurrentDatabase", WideString("C\\db.mdb"), true);

Однако, обратиться подобным образом к методу OpenReport класса DoCmd уже невозможно вследствие уже упомянутого отсутствия прямого доступа.

Поэтому, прежде чем открыть отчёт необходимо получить доступ к объекту DoCmd с помощью функции OlePropertyGet.

Variant DoCmd;
DoCmd = Access.OlePropertyGet("DoCmd");

Только теперь, когда доступ к DoCmd получен можно открыть отчёт.

DoCmd.OleFunction("OpenReport", WideString("report1"), 2, 1, 1, 3, 1);

Здесь параметры для метода OpenReport также заданы таким образом, чтобы отчёт отобразился в виде формы для просмотра перед печатью.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *