在C/S结构下,程序使用ADO直接连接SQL 2000数据库,请问如何设置客户端的ADO连接字符串?使他可以动态的适应服务器的机器名和判断服务器是否使用WINDOWS集成登陆和SQL单独登陆?
  因为我以前一直使用BDE通过ODBC连接的,所以那时只要在客户端把ODBC设置正确就可以使用了,可现在改为ADO后,不知如何动态设置去适应了?

解决方案 »

  1.   

    放一个ADO控件在程序中,根着导航做一边,就会了. :)
      

  2.   

    双击adoconnection控件,会出现一个配置向导,里面会有配置串
      

  3.   

    Adoquery的connectionstring属性动态赋值:Provider=SQLOLEDB.1;Password="";Persist Security Info=True;User ID=sa;Initial Catalog=...;Data Source=...   更改...的地方,第一个位要连接的数据库的名称,第二个为数据服务名称,这个动态赋值串可以在属性的connectionstring,点击出现对话框按提示继续就可以了!
      

  4.   

    adoconnection.connectionstring:='Provider=SQLOLEDB.1;Password=sa;Persist Security Info=True;User ID=sa;Initial Catalog=Northwind;Data Source=SERVERNAME;Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;Workstation ID=CLient1;Use Encryption for Data=False;Tag with column collation when possible=False';//用时自己修改各个属性的值
    adoconnection.open;
      

  5.   

    connectionstring属性,但最好不要直接把连接串写到程序里,因为这样很容易被人在exe搜到
    ,写到外面的文件里(加密)或者动态生成,怎么说c/s的程序都不安全,有机会改b/s把
    将来发行和升级都容易
      

  6.   

    楼上 hdjking(永昊)已经说祥细了我就不多说了!
    ---------------
    爱如火,紫如情!
    ---------------
      

  7.   

    难道是我考虑的太复杂了吗?还是没有表达清楚?我知道可以用ADO去配置他的连接向导,可那些都是静态的,那时或得的机器名和其他参数都是自己写程序机器上的参数,当编译后,我还怎么去连客户的电脑?难道只要用我的程序的都要变成我编程时的机器名和其他参数吗?至于hdjking(永昊)网友的连接我也会的,而且你还没有考虑到如果你使用的是WINDOWS集成登陆的话,这样的连接字符串是连接不上的,我现在问的主要是客户端如何设置ADO字符串连接服务器的SQL 2000数据库?
      

  8.   

    你的客户端一样要安装sql2000的客户端吧,那这个服务启动的就是你在connectionstring里的Data Source=...   啊,不是吗?
      

  9.   

    现在是如果客户使用的是WINDOWS集成登陆的话,那个USER ID和PASSWORD都怎么设置呀?
      

  10.   

    我也有一样的困惑,就是怎么变成一个变量connection。客户机在第一次启动时,把路径、用户、密码赋给该变量就行了,但我也不知该怎么设这个变量
      

  11.   

    const  GIniFileName = 'init.ini';procedure Tdatamodule2.DataModuleCreate(Sender: TObject);
    begin
      IniFile := TIniFile.Create(GetIniFilePath);
      ser_ip:=IniFile.ReadString('sever_ip', 'sever', '');
      user_name:=inifile.readstring('user_name','default_name','');
      user_pw:=inifile.readstring('user_pw','default_pw','');
      dbname:=inifile.readstring('dbname','database','');
      IniFile.Free;
      ADOConnection1.ConnectionString :=
        'Provider=SQLOLEDB.1;Persist Security Info=false'
        + ';User ID=' + user_name
        + ';Initial Catalog=' + DBName
        + ';Data Source='+ser_ip
        + ';Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096'
        + ';Workstation ID='+localip
        + ';Use Encryption for Data=False'
        + ';Tag with column collation when possible=False';
    end;function Tdatamodule2.GetIniFilePath: string;
    begin
     FRootPath := ExtractFilePath(Application.ExeName);
      Result := FRootPath + GIniFileName;
    end;
      

  12.   

    上面的方法是读取ini文件里的服务器明、数据库明、用户名、密码信息
    然后形成connectionstring
      

  13.   

    我觉得IORILI 的做法已经很好,推荐!楼主不要给我分!
      

  14.   

    谢谢 IORILI(沒落的阿咎)的回答,按你的方法基本可以了,谢谢!
    现在又来个问题,就是你的方法都是考虑非WINDOWS集成登陆的情况,因为我发现如果SQL 2000使用的WINDOWS集成登陆时,那些用户名和密码都无法使用,这如何解决,而
    他的连接字符串替换为了
      INTEGRATED SRECTUTE !1
      

  15.   

    如果是WINDOWS集成登陆的话,用户名改为WINDOWS登陆名 密码为登陆密码