以程式更改 BDE 參數 (適用於 BDE 4.50 或之前的版本)

procedure SetConfigParameter2(Param: string; Value: string);
var
  hCfg: hDBICfg;
  Config: SYSConfig;
  Path, Option: string;
  ParamCount, I: word;
  pFields, pFld: pFLDDesc;
  pRecBuf, pRec: pBYTE;
  Found, SelfInitialized: boolean;
  rslt: DBIResult;

begin
  {$Ifdef WIN32}
  hCfg := nil; pFld := nil; pRec := nil; 
  Found := False; 
  SelfInitialized := False;
  try
    if Pos(';', Param) = 0 then
      raise EDatabaseError.Create(
       'Invalid parameter passed to function. There must ' +
       'be a semi-colon delimited sting passed');
    Path := Copy(Param, 0, Pos(';', Param) - 1);
    Option := Copy(Param, Pos(';', Param) + 1, 
                   Length(Param) - Pos(';', Param));

    rslt := DbiGetSysConfig(Config);
    if rslt <> DBIERR_NONE then
    begin
      if rslt = DBIERR_NOTINITIALIZED then // Engine not initialized...
      begin
        SelfInitialized := True;
        DbiInit(nil);
        Check(DbiGetSysConfig(Config));
      end
      else
        Check(rslt);
    end;
    (* DbiOpenConfigFile is defined as such:
        function DbiOpenConfigFile (            // Open/Create config
              pszDirPath    : PChar;            // Directory 
              bCreate       : Bool;             // TRUE to create/overwrite 
        var   hCfg          : hDBICfg           // Handle to config 
                           ): DBIResult stdcall; *)
    Check(DbiOpenConfigFile(Config.szIniFile, FALSE, hCfg));

    (* DbiCfgGetRecord is defined as such:
        function DbiCfgGetRecord (              { Get a record }
              hCfg          : hDBICfg;          { Config Handle/NULL }
              pszCfgPath    : PChar;            { Path }
        var   iFields       : Word;             { Returned nbr of fields }
              pfldDesc      : pFLDDesc;         { Field descriptors }
              pRec          : Pointer           { Field values }
                           ): DBIResult stdcall; *)
    { Call it without the field and record buffer to get the count... }
    Check(DbiCfgGetRecord(hCfg, PChar(Path), ParamCount, nil, nil));

    pFields := AllocMem(ParamCount * sizeof(FLDDesc));
    pFld := pFields;
    pRecBuf := AllocMem(10000);
    pRec := pRecBuf;

    { Get the node values... }
    Check(DbiCfgGetRecord(hCfg, PChar(Path), ParamCount, pFields, pRecBuf));

    for I := 0 to ParamCount - 1 do
    begin
      if pFields^.szName = Option then
      begin
        StrPCopy(PChar(pRecBuf), Value);

        (* DbiCfgModifyRecord is defines as such:
             function DbiCfgModifyRecord (           { Modify a record }
                   hCfg          : hDBICfg;          { Config Handle/NULL }
                   pszCfgPath    : PChar;            { Path }
                   iFields       : Word;             { Nbr of fields }
                   pfldDesc      : pFLDDesc;         { Field descriptors }
                   pRec          : Pointer           { Data values }
                ): DBIResult stdcall; *)
        Check(DbiCfgModifyRecord(hCfg,  PChar(Path), ParamCount, pFld,
pRec));

        Found := True;
      end;
      Inc(pFields);
      Inc(pRecBuf, 128);
    end;
    if Found = False then
      raise EDatabaseError.Create(Param + ' entry was not found in
configuration file');

  finally
    if pFld <> nil then
      FreeMem(pFld);
    if pRec <> nil then
      FreeMem(pRec);
    if hCfg <> nil then

    (* DbiCloseConfigFile is defined as such:
           function DbiCloseConfigFile (           { Close the config file }
           var   hCfg          : hDBICfg;          { Handle }
                 bSave         : Bool;             { To save the changes }
                 bDefault      : Bool;             { To make this file the
default }
                 bSaveAs16     : Bool              { To save as a 16-bit
config file }
              ): DBIResult stdcall; *)
      { Close and save the config file... }
    Check(DbiCloseConfigFile(hCfg, TRUE, TRUE, FALSE));
    if SelfInitialized = True then

      DbiExit;
  end;
  {$Else}
     raise EDatabaseError.Create('Non supported function in 16 bit');
  {$EndIf}
end;


procedure TForm1.Button1Click(Sender: TObject);
begin
  SetConfigParameter2('\DRIVERS\PARADOX\INIT\;NET DIR', 'c:\bdenet');
end;

    Source: geocities.com/huanlin_tsai/faq

               ( geocities.com/huanlin_tsai)