我有完整的程序,可以mail给你。

解决方案 »

  1.   

    在程序中创建:
    procedure TDm1.ChangeAlias;
    var
      AParams: TStringList;
      Dir: string;
    begin
    AParams := TStringList.Create;
    Session.GetAliasNames(AParams);   {取得别名列表}
    if AParams.IndexOf('Jjgz')<>-1 then   {判断别名是否存在,-1表示不存在}
      begin
      try
        // get the current PATH parameter
        Session.GetAliasParams('Jjgz',AParams);
        Dir := Copy(AParams.Strings[0],6,255);
        // get the new PATH parameter
        if Dir<>datapath then begin
          // Update the alias parameters
          AParams.Clear;
          AParams.Add('PATH=' + datapath);
          Session.ModifyAlias('Jjgz',AParams);
          Session.SaveConfigFile;
        end;
      finally
        AParams.Free;
      end;
      end
    else begin
      Session.AddStandardAlias('Jjgz',datapath,'Paradox');
      Session.SaveConfigFile;    {BDE配置文件存盘}
      AParams.Free;
    end;
    Application.ProcessMessages;
    end;
      

  2.   

    BDE的主要文件是Common Files\Borland Shared\BDE下的文件,
    以及注册表内的HKEY_LOCAL_MACHINE\SOFTWARE\Borland\Database Engine下的所有键值
    别名你可用Session的AddAlias等方法来实现增加及修改
    当然还包括SQL等的客户端文件
      

  3.   

    function SetDbAlias(const AliasName, ServerName, DataBaseName,
      UserName, SetPassWord: String): Boolean;
    var
      ParamList : TStringList;
    begin
      Result := False;
      ParamList := TStringList.Create;
      try
        ParamList.Clear;
        ParamList.Add('SERVER NAME=' + ServerName);
        ParamList.Add('Database NAME=' + DataBaseName);
        ParamList.Add('USER NAME=' + UserName);
        ParamList.Add('PASSWORD=' + SetPassWord);
        if Session.IsAlias(AliasName) then
        begin
          Session.ModifyAlias(AliasName,ParamList);
        end
        else
        begin
          Session.AddAlias(AliasName,'MSSQL',ParamList);
        end;
        Session.SaveConfigFile;
      except
        ParamList.free;
        Exit;
      end;
      ParamList.free;
      Result:=True;
    end;
      

  4.   

    不要用自带的那东西,bug多多,也麻烦的多。用其它的好了,都是很方便的。wise8好了。
      

  5.   

      asl := Tstringlist.Create ;
      asl.Clear ;
      asl.Add ('Driver Name= MSSQL');
      asl.Add ('Server Name= ' + svrname);
      asl.Add ('Database Name= ' + Dname);
      asl.Add ('User Name= ' + Username);
      asl.Add ('sqlqrymode=local');  if not Session.IsAlias ('STJ') then
      begin
       try
         Session.AddAlias ('STJ','MSSQL',ASL);
        finally
         asl.Free ;
        end;
      end
      else if Session.IsAlias ('STJ') then
      begin
       try
         Session.ModifyAlias ('STJ',ASL);
        finally
         asl.Free ;
        end;
      end;
      Application.CreateForm(TDm, Dm);  with Dm.SumdataBase do
      begin
    IF Connected = true then
         Connected := false;   aliasname := 'STJ';
        params.Clear ;
        params.Add ('server name=' + svrname);
        params.Add ('database name=' + Dname);
        params.Add ('user name=' + lname);
        params.Add ('password=' + lword);
        loginprompt := false;
        keepconnection := true;    try
          Connected := true;
        except
          application.MessageBox (pchar('无法启动数据库,请检查数据服务器是否已经启动!'),Pchar('错误'),mb_ok);
          application.Terminate ;
          exit;
        end;
    end;
      

  6.   

    调下面函数即可:
    procedure Set_MSSQL_Alias( snAlias, ServerName, DbName, UserName, Password: string);
    var
            Env: DBIEnv;
            Result: DBIResult;
            sError: string;
            sParams: string;begin
    with Env do begin
    StrPCopy(szWorkDir,pchar(''));
    StrPCopy(szIniFile,'');
    bForceLocalInit := True;
    StrPCopy(szLang,'');
    StrPCopy(szClientName,'Tony');
    end;        sParams := 'DATABASE NAME:' + DbName +'; ';
            sParams := sParams + 'HOST NAME:'+ ServerName + '; ';
            sParams := sParams + 'USER NAME:'+ UserName + '; ';
            sParams := sParams + 'SERVER NAME:' + ServerName;
    if DbiInit(@Env) <> DBIERR_NONE then
    raise Exception.create('不能初始化数据库,别名创建失败!');
    Result :=  DbiAddAlias( nil, pchar(snAlias), pchar('MSSQL'), pchar(sParams), true);
    case Result of
    DBIERR_NONE:
                        sError := '';
    DBIERR_NAMENOTUNIQUE:
                        sError := '别名已经存在!创建失败。'
    else
                        sError := '数据库连接别名创建失败,未知原因!';
    end;
            if sError <> '' then
               raise Exception.create(sError);
            Session.SaveConfigFile;
    if DbiExit <> DBIERR_NONE then
    raise Exception.create('关闭数据引擎失败!');end;
      

  7.   

    我先利用IS看看
    请把.IWZ和相关的数据库文件发到[email protected]
      

  8.   

    snjun(^O^,其实我不高兴):DataBase也需要设置别名或者路径阿
      

  9.   


    配置BDE注册的代码:   ///////跟Cobi(小新)学的
    procedure InitBde;
    var
       DataDirectory : string;
       ARegistry     : TRegistry;
    begin
      DataDirectory := ExtractFilePath( Application.ExeName );
      DataDirectory := DataDirectory+'bde\';
      ARegistry     := TRegistry.Create;
      with ARegistry do    {创建一个TRegistry对象实例  }
      begin
        RootKey := HKEY_LOCAL_MACHINE;{指定根键为HKEY_LOCAL_MACHINE}
        if not OpenKey( 'Software\Borland\BLW32', False ) then
        begin
    //      showmessage('key 1'); {写入BDE语言驱动程序所在的目录,即当前程序目录   }
          OpenKey( 'Software\Borland\BLW32', True );
          WriteString( 'BLAPIPATH', DataDirectory );
        end;
        CloseKey;    {关闭主键,同时将信息写入注册表}
        RootKey := HKEY_LOCAL_MACHINE;
        if not OpenKey('Software\Borland\Database Engine',False) then
        begin
    //      showmessage('key 2');
          OpenKey('Software\Borland\Database Engine',True);
          WriteString( 'DLLPATH', DataDirectory );
        end;
        CloseKey;    {关闭主键,同时将信息写入注册表}
        Destroy;     {释放内存  }
      end;
    end;
      

  10.   

    都是说在form.create的时候建立路径吗? 
    如果使用IS制作的,请把.iwz文件和相关数据库(一个字段就可以了)发到[email protected]
      

  11.   

    我觉得用session,database动态创建别名就可以了。