Sources
Delphi Russian Knowledge Base
DRKB - база знаний по Дельфи в рунете, составленная Виталием Невзоровым

Открытие доступа (раннее связывание)

01.01.2007

Прежде чем вы сможете использовать этот метод, вы должны импортировать библиотеку типов (MSAcc8.olb для Access 97).

Одним из способов запуска Access является попытка Excel выполнить вызов GetActiveObject, чтобы получить работающий экземпляр Access, но поместить вызов CoApplication.Create в предложение исключения.

Но исключения работают медленно и могут вызвать проблемы в среде IDE для людей, которым нравится, когда для параметра Break On Exception установлено значение True.

Следующий код устраняет необходимость в конструкции try... except, избегая использования OleCheck для GetActiveObject в случае, когда Access не запущен.

  uses Windows, ComObj, ActiveX, Access_TLB;
  var 
    Access: _Application; 
    AppWasRunning: boolean; // tells you if you can close Access when you've finished
    Unknown: IUnknown; 
    Result: HResult; 
  begin 
    AppWasRunning := False;

    {$IFDEF VER120}      // Delphi 4
    Result := GetActiveObject(CLASS_Application_, nil, Unknown); 
    if (Result = MK_E_UNAVAILABLE) then 
      Access := CoApplication_.Create 

    {$ELSE}              // Delphi 5
    Result := GetActiveObject(CLASS_AccessApplication, nil, Unknown); 
    if (Result = MK_E_UNAVAILABLE) then 
      Access := CoAccessApplication.Create 
    {$ENDIF}  

    else begin 
      { make sure no other error occurred during GetActiveObject } 
      OleCheck(Result); 
      OleCheck(Unknown.QueryInterface(_Application, Access)); 
      AppWasRunning := True; 
    end; 
    Access.Visible := True;
    ...

Вариант без использования библиотеки типов

Автоматизация намного проще и быстрее с использованием библиотек типов (раннее связывание), поэтому вам следует избегать вариантов работы без их использования, если это вообще возможно. Но если вы действительно без них не можете, то вот как начать:

        var 
          Access: Variant; 
        begin 
          try 
            Access := GetActiveOleObject('Access.Application');    
          except 
            Access := CreateOleObject('Access.Application');    
          end; 
          Access.Visible := True; 
Previous page:
Как закрыть базу данных?
Top:
DRKB
Next page:
Как получить список всех отчетов и форм