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

Previous  Top  Next

    
 

 

 

Code:

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.

 

©Drkb::02487

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

Сборник Kuliba

 

 


Способ 1:

 

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

Code:

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;

 

 

 

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

Code:

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

 

©Drkb::02488

 

Способ 2:

 

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

Code:

RootKey := HKEY_LOCAL_MACHINE;

OpenKey(`SOFTWARE\Borland\Database Engine`, False);

try

  s := ReadString(`CONFIGFILE01`);

 

  //BDE установлена

finally

  CloseKey;

end;

©Drkb::02489

 

 

 

Способ 3:

 

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

Code:

 

IsBDEExist := (dbiInit(nil) = 0)

 

 

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

©Drkb::02490

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