各位大侠:
     小弟想要实现的功能:根据我自定义的AliasName, ServerName, DataBaseName, UserName, PassWord,在BDE自动创建一个别名系统,然后在delphi查询我的别名数据库代码如下:
procedure TForm1.btn1Click(Sender: TObject);
var
  BDE_Alias,Ser_name,dat_name,Use_name,Pas_word:string;
  DataParams:TStringList;//字符串列表
begin
  Ser_name:=edt1.Text; //服务器名
  dat_name:=edt2.Text; //数据库名 路径
  Use_name:=edt3.Text; //数据库用户登录名
  Pas_word:=edt4.Text; //数据库用户登录密码
  BDE_Alias:=edt5.Text; // Aliasname
  DataParams:=TStringList.Create;
  try
    DataParams.Clear;
    DataParams.Add('SERVER NAME='+ser_name);//服务器名或者IP
    DataParams.Add('DATABASENAME='+dat_name);
    DataParams.Add('USER NAME='+Use_name);
    DataParams.Add('PASSWORD='+Pas_word);
    if session.IsAlias(bde_alias) then
    begin
        session.ModifyAlias(bde_alias,dataparams);
    end
    else
    begin
      Session.AddAlias(bde_alias,'MSSQL',dataparams);
    end;
    Session.SaveConfigFile;
    except;
    DataParams.Free;
    exit;
    end;
    DataParams.Free;
    db1.Connected:=False;
    db1.Params.Values['USERNAME']:=Use_name;
    db1.Params.Values['PASSWORD']:=Pas_word;
    db1.LoginPrompt:=False;
    db1.Connected:=True;        //连不上    qry1.DatabaseName:=db1.databasename;
    qry1.Close;
    qry1.SQL.Clear;
    qry1.SQL.Add('select * from books');
    qry1.Open;
    qry1.Active:=True;
end;
上面代码就是连接不上BDE,在db1.connect:=true就报错,意思是连不上,,请求各位高手指点一下小弟,怎么用代码去实现这个功能;

解决方案 »

  1.   

    没有看到你EXCEPTION截图,试下这个:
        db1.Connected:=False;
        db1.Params.Values['USERNAME']:=Use_name;
        db1.Params.Values['PASSWORD']:=Pas_word;
        db1.LoginPrompt:=False;
        db1.Connected:=True;        //连不上
    =================================
        db1.Close;
        db1.Params.Values['USERNAME']:=QuotedStr(Use_name);
        db1.Params.Values['PASSWORD']:=QuotedStr(Pas_word);
        db1.LoginPrompt:=False;
        db1.Open;        //连不上
      

  2.   


    大侠,,还是连不上,,
    database 控件是不是要设置什么属性的?
      

  3.   

    为什么非要用bde,在xe7最新版已经抛弃bde了,所以建议你别研究bde了,直接用ADO组件套。
      

  4.   

    我觉得也是,用BDE的话 写好程序 每个客户端都要配置BDE才能运行程序。还不如直接ADO呢。
      

  5.   

    截个Exception 图上来吧
      

  6.   

    别纠结了, 直接上ADO吧~ 
      

  7.   

    BDE早就被淘汰了,N年以前用过,建议用ADO。
    下面是我以前采用的代码供你参考:
    dbalia 是别名procedure Tfrmmain.ckbde;
    var
      isbdeexist: boolean;
      ap: TStringlist; {字符串列表变量}
    begin
      isBDEExist := (dbiInit(nil) = 0);
      // showmessage(Session.GetAliasParams['MyAlias'].values['PATH']);
      ap := TStringlist.Create;
      if isbdeexist then
      begin
        try
          Session.GetAliasNames(ap); {取得别名列表}
          if (ap.IndexOf(dbalia) = -1) then
          begin
            Session.AddStandardAlias(dbalia, dbpath, 'Paradox');
            // Session.SaveConfigFile;
          end
          else
          begin
            Session.DeleteAlias(dbalia);
            Session.AddStandardAlias(dbalia, dbpath, 'Paradox');
          end;     
          Session.NetFileDir := dbpath;    except
          ap.Free;
        end;
      end
      else
      begin
        if dm1.IsAdmin then
        begin
          if
            application.messagebox('BDE初始失败!可能其它程序破坏了BDE,要更正吗?',
            '出错', MB_YESNOCANCEL + MB_ICONWARNING) = IDYES then
          begin
            doreg := true;
            dm1.regbde;
            ckbde;
          end;
        end
        else
        begin
          messagebox(application.Handle,
            'BDE初始失败!可能其它程序破坏了BDE,需要以系统管理员身份先运行此程序',
            '提示', mb_ok + mb_iconerror);    end;
      end;
      ap.Free;
    end;
    procedure Tdm1.regbde;
    var
      reg: Tregistry;
      regpath: string;
    begin
      regpath := extractfilepath(application.ExeName) + 'bde';
      Reg := TRegistry.Create;
      try
        Reg.RootKey := HKEY_LOCAL_MACHINE;
        if (Reg.OpenKey('\Software\Borland\Database Engine', false) = False) or doreg
          then
        begin
          { if not IsAdmin then
           begin
           messagebox(application.Handle,'需要以系统管理员身份先运行此程序','提示',mb_ok+mb_iconerror);
           reg.CloseKey;
          reg.Free;
           exit;
           end;      }
          reg.CreateKey('\Software\Borland\Database Engine');
          Reg.OpenKey('\Software\Borland\Database Engine', true);
          reg.WriteString('DLLPATH', regpath);
          reg.CloseKey;
          isreg := true;
        end;
        Reg.RootKey := HKEY_LOCAL_MACHINE;
        if (reg.OpenKey('\Software\Borland\BLW32', false) = False) or doreg then
        begin
          {  if not IsAdmin then
          begin
          messagebox(application.Handle,'需要以系统管理员身份先运行此程序','提示',mb_ok+mb_iconerror);
            reg.CloseKey;
         reg.Free;
          exit;
          end;  }
          reg.CreateKey('\Software\Borland\BLW32');
          reg.OpenKey('\Software\Borland\BLW32', true);
          reg.WriteString('BLAPIPATH', regpath);
          isreg := true;
        end;
      finally
        reg.CloseKey;
        reg.Free;
      end;end;procedure Tdm1.removereg;
    var
      reg: Tregistry;
      regpath: string;
    begin
      regpath := extractfilepath(application.ExeName) + 'bde';
      if not isreg then
        exit;  Reg := TRegistry.Create;
      try
        Reg.RootKey := HKEY_LOCAL_MACHINE;    if Reg.OpenKey('\Software\Borland\Database Engine', false) = true then
        begin
          reg.DeleteKey('\Software\Borland\Database Engine');
        end;
        Reg.RootKey := HKEY_LOCAL_MACHINE;
        if reg.OpenKey('\Software\Borland\BLW32', false) = true then
        begin
          reg.DeleteKey('\Software\Borland\BLW32');
        end;
      finally
        reg.CloseKey;
        reg.Free;
      end;end;