Delphi - база знаний


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


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




unitFindbde;

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 <> nilthen 
  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-файлы, но оставить в реестре ключ :)


Взято с Исходников.ru




Начало  Назад  Вперед