Приветствую Вас Гость | RSS

Меню сайта

Реклама

Категории раздела
ADO [17]
ASCII и CSV [12]
Access [20]
Alias [24]
BDE [37]
BLOB поля [19]
Clipper [2]
DB2 [2]
DBASE и DBF [26]
Fox Pro [1]
Interbase [21]
MSSQL [0]
ODBC [10]
Oracle [0]
Paradox [0]
SQL [29]
Sybase [1]
База данных [0]
Закладки [2]
Записи [0]
Индексы [10]
Компоненты и Базы данных [0]
Модуль данных [3]
Отчеты [2]
Ошибки БД [17]
Поиск [16]
Поля [0]
Сортировка и Фильтр [6]
Таблицы [0]

Наш опрос
Есть ли у Вас свой сайт?
Всего ответов: 48

Статистика

Онлайн всего: 3
Гостей: 3
Пользователей: 0

Форма входа

Главная » Статьи » Базы данных » BDE

Изменение конфигурации IDAPI
Возможно ли установить параметр MAXFILEHANDLES в IDAPI.CFG посредством Delphi? 

Да. Следующий компонент показывает как это можно сделать (а также изменить другие параметры):



unit CFGTOOL;

interface

uses SysUtils, Classes, DB, DbiProcs, DbiTypes, DbiErrs;

type
  TBDEConfig = class(TComponent)
  private
  FLocalShare: Boolean;
  FMinBufSize: Integer;
  FMaxBufSize: Integer;
  FSystemLangDriver: string;
  FParadoxLangDriver: string;
  FMaxFileHandles: Integer;
  FNetFileDir: string;
  FTableLevel: string;
  FBlockSize: Integer;
  FDefaultDriver: string;
  FStrictIntegrity: Boolean;
  FAutoODBC: Boolean;

  procedure Init;
  procedure SetLocalShare(Value: Boolean);
  procedure SetMinBufSize(Value: Integer);
  procedure SetMaxBufSize(Value: Integer);
  procedure SetSystemLangDriver(Value: string);
  procedure SetParadoxLangDriver(Value: string);
  procedure SetMaxFileHandles(Value: Integer);
  procedure SetNetFileDir(Value: string);
  procedure SetTableLevel(Value: string);
  procedure SetBlockSize(Value: Integer);
  procedure SetDefaultDriver(Value: string);
  procedure SetAutoODBC(Value: Boolean);
  procedure SetStrictIntegrity(Value: Boolean);
  procedure UpdateCFGFile(path, item, value: string);

  protected

  public
  constructor Create(AOwner: TComponent); override;
  destructor Destroy; override;
  published
  property LocalShare: Boolean read FLocalShare write SetLocalShare;
  property MinBufSize: Integer read FMinBufSize write SetMinBufSize;
  property MaxBufSize: Integer read FMaxBufSize write SetMaxBufSize;
  property SystemLangDriver: string
  read FSystemLangDriver write SetSystemLangDriver;
  property ParadoxLangDriver: string
  read FParadoxLangDriver write SetParadoxLangDriver;
  property MaxFileHandles: Integer
  read FMaxFileHandles write SetMaxFileHandles;
  property NetFileDir: string read FNetFileDir write SetNetFileDir;
  property TableLevel: string
  read FTableLevel write SetTableLevel;
  property BlockSize: Integer
  read FBlockSize write SetBlockSize;
  property DefaultDriver: string
  read FDefaultDriver write SetDefaultDriver;
  property AutoODBC: Boolean
  read FAutoODBC write SetAutoODBC;
  property StrictIntegrity: Boolean
  read FStrictIntegrity write SetStrictIntegrity;

  end;

procedure Register;

implementation

function StrToBoolean(Value: string): Boolean;
begin
  if (UpperCase(Value) = 'TRUE') or
  (UpperCase(Value) = 'ON') or
  (UpperCase(Value) = 'YES') or
  (UpperCase(Value) = '.T.') then
  Result := True
  else
  Result := False;
end;

function BooleanToStr(Value: Boolean): string;
begin
  if Value then
  Result := 'TRUE'
  else
  Result := 'FALSE';
end;

procedure Register;
begin
  RegisterComponents('Data Access', [TBDEConfig]);
end;

procedure TBDEConfig.Init;
var
  h: hDBICur;
  pCfgDes: pCFGDesc;
  n, v: string;
begin
  Check(DbiOpenCfgInfoList(nil, dbiREADWRITE, cfgPersistent, '\SYSTEM\INIT',
  h));
  GetMem(pCfgDes, sizeof(CFGDesc));
  try
  FillChar(pCfgDes^, sizeof(CFGDesc), #0);
  while (DbiGetNextRecord(h, dbiWRITELOCK, pCfgDes, nil) = DBIERR_NONE) do
  begin
  n := StrPas(pCfgDes^.szNodeName);
  v := StrPas(pCfgDes^.szValue);
  if n = 'LOCAL SHARE' then
  FLocalShare := StrToBoolean(v)
  else if n = 'MINBUFSIZE' then
  FMinBufSize := StrToInt(v)
  else if n = 'MAXBUFSIZE' then
  FMaxBufSize := StrToInt(v)
  else if n = 'MAXFILEHANDLES' then
  FMaxFileHandles := StrToInt(v)
  else if n = 'LANGDRIVER' then
  FSystemLangDriver := v
  else if n = 'AUTO ODBC' then
  FAutoODBC := StrToBoolean(v)
  else if n = 'DEFAULT DRIVER' then
  FDefaultDriver := v;
  end;
  if (h <> nil) then
  DbiCloseCursor(h);
  Check(DbiOpenCfgInfoList(nil, dbiREADWRITE, cfgPersistent,
  '\DRIVERS\PARADOX\INIT', h));
  FillChar(pCfgDes^, sizeof(CFGDesc), #0);
  while (DbiGetNextRecord(h, dbiWRITELOCK, pCfgDes, nil) = DBIERR_NONE) do
  begin
  n := StrPas(pCfgDes^.szNodeName);
  v := StrPas(pCfgDes^.szValue);
  if n = 'NET DIR' then
  FNetFileDir := v
  else if n = 'LANGDRIVER' then
  FParadoxLangDriver := v;
  end;
  if (h <> nil) then
  DbiCloseCursor(h);
  Check(DbiOpenCfgInfoList(nil, dbiREADWRITE, cfgPersistent,
  '\DRIVERS\PARADOX\TABLE CREATE', h));
  FillChar(pCfgDes^, sizeof(CFGDesc), #0);
  while (DbiGetNextRecord(h, dbiWRITELOCK, pCfgDes, nil) = DBIERR_NONE) do
  begin
  n := StrPas(pCfgDes^.szNodeName);
  v := StrPas(pCfgDes^.szValue);
  if n = 'LEVEL' then
  FTableLevel := v
  else if n = 'BLOCK SIZE' then
  FBlockSize := StrToInt(v)
  else if n = 'STRICTINTEGRITY' then
  FStrictIntegrity := StrToBoolean(v);
  end;
  finally
  FreeMem(pCfgDes, sizeof(CFGDesc));
  if (h <> nil) then
  DbiCloseCursor(h);
  end;
end;

procedure TBDEConfig.SetLocalShare(Value: Boolean);
begin
  UpdateCfgFile('\SYSTEM\INIT', 'LOCAL SHARE', BooleanToStr(Value));
  FLocalShare := Value;
end;

procedure TBDEConfig.SetMinBufSize(Value: Integer);
begin
  UpdateCfgFile('\SYSTEM\INIT', 'MINBUFSIZE', IntToStr(Value));
  FMinBufSize := Value;
end;

procedure TBDEConfig.SetMaxBufSize(Value: Integer);
begin
  UpdateCfgFile('\SYSTEM\INIT', 'MAXBUFSIZE', IntToStr(Value));
  FMaxBufSize := Value;
end;

procedure TBDEConfig.SetSystemLangDriver(Value: string);
begin
  UpdateCfgFile('\SYSTEM\INIT', 'LANGDRIVER', Value);
  FSystemLangDriver := Value;
end;

procedure TBDEConfig.SetParadoxLangDriver(Value: string);
begin
  UpdateCfgFile('\DRIVERS\PARADOX\INIT', 'LANGDRIVER', Value);
  FParadoxLangDriver := Value;
end;

procedure TBDEConfig.SetMaxFileHandles(Value: Integer);
begin
  UpdateCfgFile('\SYSTEM\INIT', 'MAXFILEHANDLES', IntToStr(Value));
  FMaxFileHandles := Value;
end;

procedure TBDEConfig.SetNetFileDir(Value: string);
begin
  UpdateCfgFile('\DRIVERS\PARADOX\INIT', 'NET DIR', Value);
  FNetFileDir := Value;
end;

procedure TBDEConfig.SetTableLevel(Value: string);
begin
  UpdateCfgFile('\DRIVERS\PARADOX\TABLE CREATE', 'LEVEL', Value);
  FTableLevel := Value;
end;

procedure TBDEConfig.SetBlockSize(Value: Integer);
begin
  UpdateCfgFile('\DRIVERS\PARADOX\TABLE CREATE', 'BLOCK SIZE', IntToStr(Value));
  FBlockSize := Value;
end;

procedure TBDEConfig.SetStrictIntegrity(Value: Boolean);
begin
  UpdateCfgFile('\DRIVERS\PARADOX\TABLE CREATE', 'STRICTINTEGRITY',
  BooleanToStr(Value));
  FStrictIntegrity := Value;
end;

procedure TBDEConfig.SetDefaultDriver(Value: string);
begin
  UpdateCfgFile('\SYSTEM\INIT', 'DEFAULT DRIVER', Value);
  FDefaultDriver := Value;
end;

procedure TBDEConfig.SetAutoODBC(Value: Boolean);
begin
  UpdateCfgFile('\SYSTEM\INIT', 'AUTO ODBC', BooleanToStr(Value));
  FAutoODBC := Value;
end;

procedure TBDEConfig.UpdateCFGFile;
var
  h: hDbiCur;
  pCfgDes: pCFGDesc;
  pPath: array[0..127] of char;
begin
  StrPCopy(pPath, Path);
  Check(DbiOpenCfgInfoList(nil, dbiREADWRITE, cfgPersistent, pPath, h));
  GetMem(pCfgDes, sizeof(CFGDesc));
  try
  FillChar(pCfgDes^, sizeof(CFGDesc), #0);
  while (DbiGetNextRecord(h, dbiWRITELOCK, pCfgDes, nil) = DBIERR_NONE) do
  begin
  if StrPas(pCfgDes^.szNodeName) = item then
  begin
  StrPCopy(pCfgDes^.szValue, value);
  Check(DbiModifyRecord(h, pCfgDes, True));
  end;
  end;
  finally
  FreeMem(pCfgDes, sizeof(CFGDesc));
  if (h <> nil) then
  DbiCloseCursor(h);
  end;
end;

constructor TBDEConfig.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  Init;
end;

destructor TBDEConfig.Destroy;
begin
  inherited Destroy;
end;

end.
Категория: BDE | Добавил: Skinner (05.07.2008) | Автор: Eryk Bottomley
Просмотров: 446 | Рейтинг: 0.0/0
  Delphi Lab   Главная   Регистрация   Вход  
Интересная Цитата

Поиск

Магазин


Copyright MyCorp © 2025 Хостинг от uCoz