• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 1543
  • Last Modified:

Borland Database Engine using SetConfigParameter to set NET DIR - Object not found Error

I'm using SetConfigParameter in Delphi 5 to set the NET DIR but get Object not found error. Here's my code:

SetConfigParameter('\program files\common files\borland shared\bde\;NET DIR','\program files\common files\borland shared\bde\');

I'm using the code for the SetConfigParameter routine from the Borland website

Thanks
0
pauljackson5750
Asked:
pauljackson5750
  • 2
1 Solution
 
rfwoolfCommented:
I think the first parameter you're supplying is no good, try adding the drive letter, i.e.
SetConfigParameter('C:\program files\common files\borland shared\bde\;NET DIR','\program files\common files\borland shared\bde\');

personally I add DBTables to my uses clause of the form, then I say

session.netfiledir := 'c:\whatever';
0
 
rfwoolfCommented:
Okay here's what I found on the borland website and implemented to change the LOCAL SHARE to true.

The first is a general procedure to make changes to the BDE:

The second calls the procedure with the parameter to be set in the BDE config file...
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 error...
      begin
        SelfInitialized := True;
        DbiInit(nil);
        Check(DbiGetSysConfig(Config));
      end
      else
        Check(rslt);
    end;
    (* DbiOpenConfigFile is defined as such:
        function DbiOpenConfigFile (            { Open/Create configuration }
              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;
 
 
 
 
 
 
 
===============================================================
 
 
 
 
 
  //Set LOCAL SHARE TO TRUE
SetConfigParameter2('\SYSTEM\INIT\;LOCAL SHARE', 'TRUE');

Open in new window

0
 
pauljackson5750Author Commented:
Used the session.netfiledir := getcurrentdir and it seems to work.

Many thanks
0

Featured Post

Take Control of Web Hosting For Your Clients

As a web developer or IT admin, successfully managing multiple client accounts can be challenging. In this webinar we will look at the tools provided by Media Temple and Plesk to make managing your clients’ hosting easier.

  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now