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

Проверка наличия BDE

01.01.2007
unit Findbde;
 
interface
 
implementation
uses
 
 
Controls,
 
SysUtils,
 
WinTypes,
 
WinProcs,
 
Dialogs;
 
var
 
 
IdapiPath: array[0..255] of Char;
 
IdapiHandle: THandle;
 
initialization
 
 
GetProfileString('IDAPI', 'DLLPath', 'C:\', IdapiPath, 255);
{следующие строки "изолируют" первый путь к каталогу из IdapiPath в случае, если их несколько}
  if Pos('
;', StrPas(IdapiPath)) <> 0 then
    begin
      StrPCopy(IdapiPath, Copy(StrPas(IdapiPath), 1,
        Pred(Pos('
;', StrPas(IdapiPath)))));
    end;
  IdapiHandle := LoadLibrary(StrCat(IdapiPath, '
\IDAPI01.DLL'));
  if IdapiHandle < HINSTANCE_ERROR then
    begin
      if MessageDlg('
ОШИБКА: Borland Database Engine (IDAPI) не найдена' +
        '
перед следующей попыткой ее необходимо установить....',
        mtError, [mbOK], 0) = mrOK then
        Halt
    end
{ IDAPI в системе не установлена }
  else
    begin
      FreeLibrary(IdapiHandle);
{ IDAPI Установлена в системе }
    end;
 
end.

Взято из Советов по Delphi от Валентина Озерова

Сборник Kuliba


Способ 1:

Следующая функция получает структуру SysVersion и записывает результаты в stringlist.

uses dbierrs, DBTables; 
...
 
function fDbiGetSysVersion(SysVerList: TStringList): SYSVersion;
var
 
Month, Day, iHour, iMin, iSec: Word;
 
Year: SmallInt;
begin
 
Check(DbiGetSysVersion(Result));
 
if (SysVerList <> nil) then
 
begin
   
with SysVerList do
   
begin
     
Clear;
     
Add(Format('ENGINE VERSION=%d', [Result.iVersion]));
     
Add(Format('INTERFACE LEVEL=%d', [Result.iIntfLevel]));
     
Check(DbiDateDecode(Result.dateVer, Month, Day, Year));
     
Add(Format('VERSION DATE=%s', [DateToStr(EncodeDate
               
(Year, Month, Day))]));
     
Check(DbiTimeDecode(Result.timeVer, iHour, iMin, iSec));
     
Add(Format('VERSION TIME=%s', [TimeToStr(EncodeTime
               
(iHour, iMin, iSec div 1000, iSec div 100))]));
   
end;
 
end;
end;

Вызов этой функции выглядит следующим образом:

var hStrList: TStringList; 
   
Ver: SYSVersion;
begin
  hStrList
:= TStringList.Create;
 
try Ver := fDbiGetSysVersion(hStrList); except
   
ShowMessage('BDE not installed !');
 
end;
 
ShowMessage(IntToStr(Ver.iVersion));
  Memo1
.Lines.Assign(hStrList);
  hStrList
.Destroy;
end;

Возможные результаты (отображаемые в memo-поле):

ENGINE VERSION=500

INTERFACE LEVEL=500

VERSION DATE=09.06.98

VERSION TIME=17:06:13

Способ 2:

Читаем ключ в реестре:

RootKey := HKEY_LOCAL_MACHINE; 
OpenKey(`SOFTWARE\Borland\Database Engine`, False);
try
   s
:= ReadString(`CONFIGFILE01`);
 
   
//BDE установлена
finally
   
CloseKey;
end;

Способ 3:

Можно попробовать установить BDE

 
 
IsBDEExist := (dbiInit(nil) = 0)
 

PS: Последний способ более предпочтителен, так как анинсталлер мог удалить BDE-файлы, но оставить в реестре ключ :)

Взято из https://forum.sources.ru